2
找不到解决方案。 我有以下存储过程:例程xxx的OUT或INOUT参数1不是变量或BEFORE触发器中的NEW伪变量
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_process_upload_log`(
inout prm_upload_id int,
prm_location_id integer,
prm_week_start integer,
prm_error_code integer,
prm_last_attempt_date integer,
prm_error_log_url varchar(256))
BEGIN
select null from dual;
-- real impementation is ommited, it's not an issue, im sure
end
和corresponing PHP代码:
function update_log($conn, $upload_id, $location_id, $errcode, $att_date, $err_url) {
$week = 1;
$sql = "call sp_process_upload_log (:p0,:p1,:p2,:p3,:p4,:p5);";
try {
$stmt = $conn->prepare($sql);
$stmt->bindParam(':p0', $upload_id, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);
$stmt->bindValue(':p1', $location_id);
$stmt->bindValue(':p2', $week);
$stmt->bindValue(':p3', $errcode);
$stmt->bindValue(':p4', $att_date);
$stmt->bindValue(':p5', $err_url);
if (! $stmt->execute()) {
post_msg ("PDO Error: ".var_dump($stmt->errorInfo())."\n");
return false;
}
} catch (PDOException $e) {
post_msg ("Exception: " . $e->getMessage() . "\n");
return false;
}
return $upload_id;
}
//$conn variable is assigned with db connection resource properly
$upload_id = update_log($conn, false, 1, false, time(), "someurl");
它失败,出现错误:
array(3) {
[0]=>
string(5) "42000"
[1]=>
int(1414)
[2]=>
string(125) "OUT or INOUT argument 1 for routine hex_tvdb.sp_process_upload_log is not a variable or NEW pseudo-variable in BEFORE trigger"
}
试图调用该存储即使MySQL查询浏览器中的过程得到相同的错误。
是的,谢谢,我也发现它)它实际上是一种解决方法。只是决定在寻找解决方案时询问此问题 – heximal 2012-02-11 13:54:17
不幸的是,如果您的DBA限制用户变量(出于多种安全原因),此解决方案毫无价值。 – 2014-05-21 17:19:04