为什么我不能从PHP调用该程序?

时间:2015-02-25 18:46:28

标签: php mysql mysqli

我想从PHP调用一个程序,但我不能这样做。 这是Mysql代码:

 CREATE DEFINER=`zygycoil`@`localhost` PROCEDURE `test`(OUT `a` INT, IN `b`INT, IN `c` INT)
NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER SET a=c+b

所有函数必须做的是在变量中返回2的结果(它只是我需要做的一个例子)。

这是我的PHP代码

<?php

if ($mysqli->query("SET @x := 1;") &&  $mysqli->query("SET @y := 1;")  &&   $mysqli->query("SET @msg := 0;") ){
if (!$res = $mysqli->query("CALL test(@x,@y,@msg)", MYSQLI_USE_RESULT)) {
 //if (!$mysqli->query("CALL test(@x,@y)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
} else {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
while($row = $res->fetch_assoc()){
 var_dump($row);
}
if ($res = $mysqli->query("SELECT @msg")) {
   while($row = $res->fetch_assoc()){
  print_r ($row);
}
}
?>

我在谷歌上看了很多但是无法弄清问题是什么。然后我添加了$mysqli->errno,我收到了这个错误:

 "CALL failed: (1414) OUT or INOUT argument 1 for routine zygycoil_data.test is not a variable or NEW pseudo-variable in BEFORE trigger"

2 个答案:

答案 0 :(得分:1)

我不确定,但请尝试这种方式:

if ($mysqli->query("SET @x := 1;") &&  $mysqli->query("SET @y := 1;"  &&   $mysqli->query("SET @msg := 0;") {
   if (!$res = $mysqli->query("CALL test(@x,@y,@msg)", MYSQLI_USE_RESULT)) {
   //if (!$mysqli->query("CALL test(@x,@y)")) {
    echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
} else {
    echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

现在输出试试:

if ($res = $mysqli->query("SELECT @msg")) {
    while($row = $res->fetch_assoc()){
      print_r $row;
    }
}

答案 1 :(得分:0)

好的,谢谢亚历克斯认为解决方案有效!

<?php   if ($mysqli->query("SET @x := 1;") &&  $mysqli->query("SET @y := 1;") &&   $mysqli->query("SET @msg := 0;") ){
if (!$res = $mysqli->query("CALL test(@x,@y,@msg)")) {
 //if (!$mysqli->query("CALL test(@x,@y)")) {
  echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
} else {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if ($res = $mysqli->query("SELECT @msg")) {
while($row = $res->fetch_assoc()){
  print_r ($row['@msg']);
}
}
?>