首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 呼叫 MySQL 預存程序返回結果集:解決 "can't return a result set" 錯誤

     編輯:PHP 綜合知識

錯誤背景

使用 mysql_query() 呼叫預存程序(CALL proc())時,若預存程序包含 SELECT 返回結果集,PHP 會拋出錯誤:

Can't return a result set in the given context

核心解決方案:啟用 CLIENT_MULTI_RESULTS 旗標

需在連線時指定 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);
?>

關鍵點總結

  1. mysql_connect() 第 4 參數 1 表示新連線(非持久),第 5 參數傳入 CLIENT_MULTI_RESULTS
  2. 此旗標告知 MySQL 客戶端庫:預期可能返回多個結果集
  3. 適用於 MySQL 4.1+、PHP 4.3+ / 5.x 環境
  4. 若使用 mysqli 擴充套件,改用 mysqli::multi_query() 配合 next_result() 處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved