我想从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"
答案 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']);
}
}
?>