$sql="create procedure p(out nums INT)
Begin
select count(*) into nums from a;
End;";
$result = $db->query("call p(@nums)");
$result = $db->query("select @nums as nums");
while($row=$result->fetch_assoc())
{
$Rows[] = $row;
}
print($Rows);
结果为:
Array
(
[0] => Array
(
[nums] =>
)
)
请大神帮助看一下,什么原因,谢谢!
13 个解决方案
#1
现在命令行测试下
#2
我在执行
就是成功的。
#3
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
#4
能具体说说解决方案吗?
#5
目测你是php的开发
我印象中我很久很久以前也遇到过你这个问题 ,最后我翻看了所用的 mysql_driver 的api文档搞清楚了 php中如何调用存储过程 问题最终才解决了
这里我只能给你提供解决问题的思路和方向 方案是没有的
你代码截取的不全 我也不知道你用的是 PDO 还是PAO
假设你是PDO
你参考这个api
获取一下错误信息
http://www.cnblogs.com/echohao/p/6137725.html
拿到错误信息后再说
#6
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
#7
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
你是有多懒呀
#8
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
#9
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
你有没有获取一下错误信息 还是错误信息是空的 运行确实成功了 你有办法确定运行是成功的还是失败的吗
我们这样讲
抛开php 你命令行调用 如果能够成功的话 说明过程没有问题 所以php中没有结果 只能是调用失败了 那你解决问题得先看 错误信息
#10
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
#11
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
The values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
#12
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.htmlThe values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
我所有的变量都有定义。
#13
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");
不是你php的变量 也不是你存储过程里的变量
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.htmlThe values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
我所有的变量都有定义。
你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");
不是你php的变量 也不是你存储过程里的变量
#1
现在命令行测试下
#2
我在执行
就是成功的。
#3
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
#4
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
#5
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
目测你是php的开发
我印象中我很久很久以前也遇到过你这个问题 ,最后我翻看了所用的 mysql_driver 的api文档搞清楚了 php中如何调用存储过程 问题最终才解决了
这里我只能给你提供解决问题的思路和方向 方案是没有的
你代码截取的不全 我也不知道你用的是 PDO 还是PAO
假设你是PDO
你参考这个api
获取一下错误信息
http://www.cnblogs.com/echohao/p/6137725.html
拿到错误信息后再说
#6
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
#7
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
你是有多懒呀
#8
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
#9
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
你有没有获取一下错误信息 还是错误信息是空的 运行确实成功了 你有办法确定运行是成功的还是失败的吗
我们这样讲
抛开php 你命令行调用 如果能够成功的话 说明过程没有问题 所以php中没有结果 只能是调用失败了 那你解决问题得先看 错误信息
#10
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
#11
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
The values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
#12
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.htmlThe values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
我所有的变量都有定义。
#13
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");
不是你php的变量 也不是你存储过程里的变量
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
这里是
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
你这使用了数据库驱动,有几点需要注意
1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
替你找到了http://blog.csdn.net/hqulyc/article/details/5587167
要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢
讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少
我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题
所以你如果不想钻研api文档 你就换个驱动 用PDO
要么 你就老老实实看文档
连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.htmlThe values of INOUT/OUT parameters are accessed using session variables.
Example 3.20 Using session variables
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT "Hi!" INTO msg; END;')) {
echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)")) {
echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($res = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fetch failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$row = $res->fetch_assoc();
echo $row['_p_out'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量
我估计这就是你失败的原因
我所有的变量都有定义。
你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");
不是你php的变量 也不是你存储过程里的变量