gpt4 book ai didi

PHP bindParam 似乎不适用于 PARAM_INT 输出参数

转载 作者:行者123 更新时间:2023-11-29 14:28:43 25 4
gpt4 key购买 nike

以下是我的 MySQL 存储过程:

DROP PROCEDURE IF EXISTS sp_authenticate;
CREATE PROCEDURE sp_authenticate(IN user_name VARCHAR(50),
IN password1 VARCHAR(50), OUT nmatch INT)
BEGIN

SELECT COUNT(*) INTO nmatch
FROM user1 u
WHERE u.name = user_name AND
u.password1 = password1;

END//

这就是我从 PHP 调用它的方式:

function authenticate($pdo, $user_name, $password){
$stmt = $pdo->prepare('CALL sp_authenticate(:user_name, :password, :nmatch)');
$stmt->bindValue(':user_name', $user_name, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$nmatch = 888888;
$stmt->bindParam(':nmatch', $nmatch, PDO::PARAM_INT, 4);
$result = $stmt->execute();

return $nmatch;
}

$nmatch 始终保留其旧值,并且不从存储过程接收值。我在这里可能做错了什么?

MySQL 服务器版本:5.5.22PHP版本:5.3.10

最佳答案

this blog 中所述:

Unfortunately there’s a bug with the MySQL C API that PDO uses which means that trying to fetch an output parameter when calling a procedure results in the error:

“Syntax error or access violation: 1414 OUT or INOUT argument $parameter_number for routine $procedure_name is not a variable or NEW pseudo-variable”.

您可以在 bugs.mysql.com 上查看错误报告。 5.5.3+ 和 6.0.8+ 版本已修复此问题。

要解决此问题,您需要将输入和输出参数分开并调用该过程。 Example #11 on the PHP PDO documentation然后会读到:

$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(:in_string, @out_string)");
$stmt->bindParam(':in_string', 'hello');

// call the stored procedure
$stmt->execute();

// fetch the output
$outputArray = $this->dbh->query("select @out_string")->fetch(PDO::FETCH_ASSOC);

print "procedure returned " . $outputArray['@out_string'] . "\n";

关于PHP bindParam 似乎不适用于 PARAM_INT 输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10428480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com