3 回答

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊
另一個是塵埃落定,我放棄并定義了一個從 0 到 14 的 sql 查詢數(shù)組,并將其作為 mysqli->query() 運(yùn)行。感謝大家的評論和時間。

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ā)送每個查詢。

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é)果集返回到程序時,請使用單個查詢。
- 3 回答
- 0 關(guān)注
- 154 瀏覽
添加回答
舉報