我在 mysql 中有存储过程:sp_get_country_by_id
BEGIN
SELECT id, name FROM countries WHERE id = country_id;
END
我使用 PDO 来调用它,如下所示:
$stmt1 = $dbh->prepare("CALL sp_get_country_by_id(?)");
$stmt1->bindParam(1, $id);
$id = 102;
$stmt1->execute();
print_r($stmt1->fetch(PDO::FETCH_ASSOC));
$id = 103;
$stmt1->execute();
print_r($stmt1->fetch(PDO::FETCH_ASSOC));
返回结果如下:
Array
(
[id] => 102
[name] => Indonesia
)
预计返回两个数组,如下所示:
Array ( [id] => 102 [name]=>Indonesia)
Array ( [id] => 103 [name]=>Iran)
根据评论,我在这里添加存储过程:
CREATE PROCEDURE `sp_get_country_by_id`(IN `country_id` INT)
BEGIN
SELECT id, name FROM countries WHERE id = country_id;
END
我正在遵循这个例子。使用 INSERT 进行示例解释,我正在尝试 SELECT
http://php.net/manual/en/pdo.prepared-statements.php#example-1028
最佳答案
我很惊讶它会返回您所显示的内容。您的 $id
变量在 ->prepare
指令之前可能包含 102
我假设您的 SP 在输入中采用名为 country_id
的变量(您尚未显示)中的国家/地区 ID
为了让它发挥作用,您应该准备、绑定(bind)和执行两次:
$stmt1 = $dbh->prepare("CALL sp_get_country_by_id(?)");
$id = 102;
$stmt1->bindParam(1, $id);
$stmt1->execute();
print_r($stmt1->fetch(PDO::FETCH_ASSOC));
$stmt1 = $dbh->prepare("CALL sp_get_country_by_id(?)");
$id = 103;
$stmt1->bindParam(1, $id);
$stmt1->execute();
print_r($stmt1->fetch(PDO::FETCH_ASSOC));
<小时/>
但是如果您必须多次执行此操作,最好为其创建一个函数:
print_country_data_array(102);
print_country_data_array(103);
function print_country_data_array($countryID){
global $dbh;
$stmt1 = $dbh->prepare("CALL sp_get_country_by_id(?)");
$stmt1->bindParam(1, $countryID);
$stmt1->execute();
print_r($stmt1->fetch(PDO::FETCH_ASSOC));
}
关于php - 调用存储过程两次返回相同的结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984807/