使用 mysql_query() 呼叫預存程序(CALL proc())時,若預存程序包含 SELECT 返回結果集,PHP 會拋出錯誤:
Can't return a result set in the given context
需在連線時指定 CLIENT_MULTI_RESULTS(值 131072),允許處理多重結果集。
<?php
// 1. 定義常數(若未在 mysql 擴充套件中預定義)
define('CLIENT_MULTI_RESULTS', 131072);
// 2. 建立連線,第 5 參數傳入旗標
$link = mysql_connect("127.0.0.1", "root", "", 1, CLIENT_MULTI_RESULTS)
or die("Connect failed: " . mysql_error());
mysql_select_db("vs") or die("DB select failed");
// 3. 呼叫預存程序
$result = mysql_query("CALL get_news_from_class_id(2)")
or die("Query failed: " . mysql_error());
// 4. 正常遍歷結果集
while ($row = mysql_fetch_assoc($result)) {
echo "<tr><td><a target='_blank' href='{$row['url']}'>{$row['title']} ({$row['page_time']})</a></td></tr>\n";
}
mysql_free_result($result);
mysql_close($link);
?>
mysql_connect() 第 4 參數 1 表示新連線(非持久),第 5 參數傳入 CLIENT_MULTI_RESULTSmysqli 擴充套件,改用 mysqli::multi_query() 配合 next_result() 處理