【发布时间】:2015-04-27 22:15:39
【问题描述】:
我想从 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"
【问题讨论】:
-
你说的很好,程序有错误。
-
所有程序都在做“SET a=c+b”..查看上面的创建。那里有什么问题?,程序也是从数据库本身运行的
-
@JayBlanchard:对不起;固定的。还有php.net/manual/en/mysqli.quickstart.stored-procedures.php
-
这不能在事务中完成吗?!?