3 回答

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

TA貢獻1946條經驗 獲得超4個贊
請記住,multi_query()將一組 SQL 查詢發送到 MySQL 服務器,但僅等待第一個查詢的執行。如果您想使用執行 SQLmulti_query()并僅獲取最后一個查詢的結果而忽略前面的查詢,那么您需要執行阻塞循環并將結果緩沖到 PHP 數組中。迭代所有結果,等待 MySQL 處理每個查詢,一旦 MySQL 響應,就不再有結果,您可以保留最后獲取的結果。
例如,考慮這個函數。它向 MySQL 服務器發送一堆串聯的 SQL 查詢,然后等待 MySQL 逐個處理每個查詢。每個結果都被提取到 PHP 數組中,最后一個可用的數組從函數返回。
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;
}
顯然,將每個查詢單獨發送到 MySQL 會容易得多。multi_query()非常復雜并且用途非常有限。如果您有許多無法通過 PHP 單獨執行的 SQL 查詢,那么它會很有用,但大多數時候您應該使用準備好的語句并單獨發送每個查詢。

TA貢獻1854條經驗 獲得超8個贊
.multi_query()
您可以嘗試對操作中的所有查詢使用除最后一個之外的所有查詢,即返回您想要的 id 的 SELECT 。然后將該 SELECT 作為單個查詢運行。
這是解決您的問題的強大解決方案:@
- 變量屬于 MySql 連接并在這些連接的生命周期內持續存在。
而且,它可以使您的軟件運行干凈且可預測。當您需要將結果集返回到程序時,請使用單個查詢。
- 3 回答
- 0 關注
- 141 瀏覽
添加回答
舉報