PHP 4 只能呼叫 Stored Procedure,無法取得結果集。PHP 5 引入 mysqli 擴展完整支援多結果集處理。
--with-mysqli,或動態載入 mysqli.so/php_mysqli.dll。phpinfo() 出現 mysqli 區塊。DELIMITER //
CREATE PROCEDURE `yejr`()
BEGIN
SHOW TABLES;
END //
DELIMITER ;
CALL yejr();
-- 輸出範例:
-- +------------------+
-- | Tables_in_test |
-- +------------------+
-- | yejr1 |
-- | yejr2 |
-- +------------------+
query($query)) {
while ($row = $result->fetch_row()) {
printf("find table: %s\n", $row[0]);
}
$result->close();
}
// 若預存程序返回多個結果集,需用 next_result() 迭代
while ($mysqli->next_result()) {
if ($res = $mysqli->store_result()) {
while ($row = $res->fetch_row()) {
// 處理後續結果集
}
$res->free();
}
}
$mysqli->close();
?>
find table: yejr1
find table: yejr2
CALL 語句後必須有分號,否則語法錯誤。SELECT,需用 next_result() + store_result() 逐個處理。mysqli 亦支援預處理語句 prepare() + bind_param(),防止 SQL 注入。現有 PHP 4 專案若大量依賴預存程序,升級 PHP 5 + mysqli 為最低成本方案;長期規劃建議採用 PDO 抽象層,支援多種資料庫驅動。