2012-02-11 40 views
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查询浏览器中的过程得到相同的错误。

回答