第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

試圖理解 php mysqli multi_query

試圖理解 php mysqli multi_query

PHP
12345678_0001 2023-09-22 15:28:10
我有一個函數(shù),旨在借助 sql 查詢復(fù)制具有所有屬性的產(chǎn)品。我的問題是完成后將 new_product_id 返回給 php 。如果我在 phpmyadmin 中運(yùn)行 sql 腳本,則一切正常。如果我使用 php 函數(shù)運(yùn)行 sql 腳本,則一切正常。我需要幫助的是如何將上次查詢中的 mysql-set-variable: @new_product_id 分配給我想要返回的 php 變量。----- sql查詢------CREATE TEMPORARY TABLE tmptable SELECT * FROM product WHERE id='19' AND site_id='1';UPDATE tmptable SET id = 0,parent_id='19',status_id='1',name_internal=concat('NEW ',name_internal);INSERT INTO product SELECT * FROM tmptable;SET @new_product_id = LAST_INSERT_ID();DROP TABLE tmptable;CREATE TEMPORARY TABLE tmptable SELECT * FROM product_abcd WHERE product_id='19' AND site_id='1';UPDATE tmptable SET product_id = @new_product_id,id=0;INSERT INTO product_abcd SELECT * FROM tmptable;DROP TABLE tmptable;CREATE TEMPORARY TABLE tmptable SELECT * FROM product_efgh WHERE product_id='19' AND site_id='1';UPDATE tmptable SET product_id = @new_product_id,id=0;INSERT INTO product_efgh SELECT * FROM tmptable;DROP TABLE tmptable;(Here is more correct SQL insert statements)SELECT @new_product_id AS new_product_id;----- php函數(shù)(不完整)------上面的代碼有效,我得到了一個很好的產(chǎn)品副本,結(jié)果 =0 表示失敗,結(jié)果 1 表示成功,(這有效)我希望它的工作方式是 result= 0 失敗, result= new_product_id 成功,這樣我就可以將用戶重定向到新創(chuàng)建的產(chǎn)品,從而節(jié)省用戶一鍵點(diǎn)擊。查詢結(jié)果,來自 phpmyadmin 的結(jié)果與來自 php 的結(jié)果相同(到目前為止一切都很好,目前沒有錯誤的查詢)Mysql返回空結(jié)果(沒有行)(創(chuàng)建臨時表)1 行受影響(更新臨時表)1 行插入(插入產(chǎn)品中)mysql 返回空結(jié)果(設(shè)置 $new_product_id)mysql 返回空結(jié)果(刪除 tmp 表)mysql返回空結(jié)果(創(chuàng)建臨時表)mysql x 行受影響(更新 tmp 表)mysql x 受影響的行(插入表中)mysql 返回空結(jié)果(刪除表 tmptable)mysql返回空結(jié)果(創(chuàng)建臨時表).... N.....最后一個查詢“顯示行0-0(總共1行)(選擇@new_product_id)new_product_id = 25我嘗試了什么? 我將 select 變量作為我的最終查詢,我認(rèn)為只檢查最后一個查詢并在那里分配變量是明智的,但由于 php mysqli fetch_assoc 在非對象上不可能,所以我失敗了。所以接下來的事情就沒那么光明了,我知道我有 16 個來自 mysql 的結(jié)果,我只需要其中一個的結(jié)果,但無論如何我把它放在多查詢中
查看完整描述

3 回答

?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊

另一個是塵埃落定,我放棄并定義了一個從 0 到 14 的 sql 查詢數(shù)組,并將其作為 mysqli->query() 運(yùn)行。感謝大家的評論和時間。



查看完整回答
反對 回復(fù) 2023-09-22
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊

請記住,multi_query()將一組 SQL 查詢發(fā)送到 MySQL 服務(wù)器,但僅等待第一個查詢的執(zhí)行。如果您想使用執(zhí)行 SQLmulti_query()并僅獲取最后一個查詢的結(jié)果而忽略前面的查詢,那么您需要執(zhí)行阻塞循環(huán)并將結(jié)果緩沖到 PHP 數(shù)組中。迭代所有結(jié)果,等待 MySQL 處理每個查詢,一旦 MySQL 響應(yīng),就不再有結(jié)果,您可以保留最后獲取的結(jié)果。


例如,考慮這個函數(shù)。它向 MySQL 服務(wù)器發(fā)送一堆串聯(lián)的 SQL 查詢,然后等待 MySQL 逐個處理每個查詢。每個結(jié)果都被提取到 PHP 數(shù)組中,最后一個可用的數(shù)組從函數(shù)返回。


function executeMultiQueryAndGetOnlyLastResult(mysqli $mysqli):array {

    $mysqli->multi_query('

    SELECT "a";

    SELECT 2;

    SELECT "val";

    ');


    $values = [];


    do {

        $result = $mysqli->use_result();

        if ($result) {

            // process the results here

            $values = $result->fetch_all();

            

            $result->free();

        }

    } while ($mysqli->next_result()); // next_result will block and wait for next query to finish on MySQL server

    $mysqli->store_result(); // Needed to fetch the error as exception


    return $values;

}

顯然,將每個查詢單獨(dú)發(fā)送到 MySQL 會容易得多。multi_query()非常復(fù)雜并且用途非常有限。如果您有許多無法通過 PHP 單獨(dú)執(zhí)行的 SQL 查詢,那么它會很有用,但大多數(shù)時候您應(yīng)該使用準(zhǔn)備好的語句并單獨(dú)發(fā)送每個查詢。


查看完整回答
反對 回復(fù) 2023-09-22
?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

.multi_query()您可以嘗試對操作中的所有查詢使用除最后一個之外的所有查詢,即返回您想要的 id 的 SELECT 。然后將該 SELECT 作為單個查詢運(yùn)行。

這是解決您的問題的強(qiáng)大解決方案:@- 變量屬于 MySql 連接并在這些連接的生命周期內(nèi)持續(xù)存在。

而且,它可以使您的軟件運(yùn)行干凈且可預(yù)測。當(dāng)您需要將結(jié)果集返回到程序時,請使用單個查詢。


查看完整回答
反對 回復(fù) 2023-09-22
  • 3 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號