执行mysql存储过程无结果

用到啥就学啥 2017-03-28 09:19:55

$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] =>
)

)

请大神帮助看一下,什么原因,谢谢!
...全文
675 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
totola147 2017-03-29
  • 打赏
  • 举报
回复
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html 这里是
引用 10 楼 totola147 的回复:
[quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
引用 10 楼 totola147 的回复:
[quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
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'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量 我估计这就是你失败的原因
totola147 2017-03-29
  • 打赏
  • 举报
回复
引用 8 楼 hello100866 的回复:
[quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html
totola147 2017-03-29
  • 打赏
  • 举报
回复
引用 8 楼 hello100866 的回复:
[quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 你有没有获取一下错误信息 还是错误信息是空的 运行确实成功了 你有办法确定运行是成功的还是失败的吗 我们这样讲 抛开php 你命令行调用 如果能够成功的话 说明过程没有问题 所以php中没有结果 只能是调用失败了 那你解决问题得先看 错误信息
用到啥就学啥 2017-03-29
  • 打赏
  • 举报
回复
引用 11 楼 totola147 的回复:
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html 这里是 [quote=引用 10 楼 totola147 的回复:] [quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
引用 10 楼 totola147 的回复:
[quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
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'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量 我估计这就是你失败的原因[/quote] 我所有的变量都有定义。
totola147 2017-03-29
  • 打赏
  • 举报
回复
https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html
引用 12 楼 hello100866 的回复:
[quote=引用 11 楼 totola147 的回复:] https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.stored-procedures.html 这里是 [quote=引用 10 楼 totola147 的回复:] [quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
引用 10 楼 totola147 的回复:
[quote=引用 8 楼 hello100866 的回复:] [quote=引用 6 楼 totola147 的回复:] [quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。[/quote] 另外 既然你用的是mysqli 你为啥不参考一下 mysqli的api文档呢 讲真 大部分人用的是PDO 或者PAO 像你这样用mysqli的比较少 所以能够找到的支持就比较少 我当时用的也很小众 是sql server的一个驱动 所以我完全照着api搞 没出什么问题 所以你如果不想钻研api文档 你就换个驱动 用PDO 要么 你就老老实实看文档 连接在这里:https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.prepare.html[/quote]
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'];
?>
你看这个例程 写的很清楚 输出参数是存储在会话变量里的 所以你得先 定义会话变量 我估计这就是你失败的原因[/quote] 我所有的变量都有定义。[/quote] 你没有理解,是在调用存储过程前需要先定义会话变量 对应的例程中:$mysqli->query("SET @msg = ''"); 不是你php的变量 也不是你存储过程里的变量
用到啥就学啥 2017-03-28
  • 打赏
  • 举报
回复
引用 6 楼 totola147 的回复:
[quote=引用 4 楼 hello100866 的回复:] [quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout [/quote] 我不是用PDO,我就是用的mysqli来操作的。 兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。
rucypli 2017-03-28
  • 打赏
  • 举报
回复
现在命令行测试下
totola147 2017-03-28
  • 打赏
  • 举报
回复
引用 4 楼 hello100866 的回复:
[quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 你是有多懒呀
totola147 2017-03-28
  • 打赏
  • 举报
回复
引用 4 楼 hello100866 的回复:
[quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 替你找到了http://blog.csdn.net/hqulyc/article/details/5587167 要先绑定变量 然后execute 绑定变量时注意属性设置 in out inout
totola147 2017-03-28
  • 打赏
  • 举报
回复
引用 4 楼 hello100866 的回复:
[quote=引用 3 楼 totola147 的回复:] 你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?[/quote] 目测你是php的开发 我印象中我很久很久以前也遇到过你这个问题 ,最后我翻看了所用的 mysql_driver 的api文档搞清楚了 php中如何调用存储过程 问题最终才解决了 这里我只能给你提供解决问题的思路和方向 方案是没有的 你代码截取的不全 我也不知道你用的是 PDO 还是PAO 假设你是PDO 你参考这个api 获取一下错误信息 http://www.cnblogs.com/echohao/p/6137725.html 拿到错误信息后再说
用到啥就学啥 2017-03-28
  • 打赏
  • 举报
回复
引用 3 楼 totola147 的回复:
你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
能具体说说解决方案吗?
totola147 2017-03-28
  • 打赏
  • 举报
回复
你这使用了数据库驱动,有几点需要注意 1 对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨 2 没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因
用到啥就学啥 2017-03-28
  • 打赏
  • 举报
回复


我在执行

就是成功的。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧