执行mysql存储过程无结果

时间:2020-12-07 22:50:48

$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


执行mysql存储过程无结果

我在执行
执行mysql存储过程无结果
就是成功的。

#3


你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

#4


引用 3 楼 totola147 的回复:
你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?

#5


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


目测你是php的开发
我印象中我很久很久以前也遇到过你这个问题 ,最后我翻看了所用的 mysql_driver 的api文档搞清楚了 php中如何调用存储过程  问题最终才解决了  
这里我只能给你提供解决问题的思路和方向  方案是没有的  

你代码截取的不全  我也不知道你用的是 PDO  还是PAO   
假设你是PDO 
你参考这个api 
获取一下错误信息    
http://www.cnblogs.com/echohao/p/6137725.html
拿到错误信息后再说

#6


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 

#7


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


你是有多懒呀

#8


引用 6 楼 totola147 的回复:
Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 


我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。

#9


引用 8 楼 hello100866 的回复:
Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 


我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。


你有没有获取一下错误信息 还是错误信息是空的   运行确实成功了  你有办法确定运行是成功的还是失败的吗   
我们这样讲
抛开php   你命令行调用  如果能够成功的话 说明过程没有问题  所以php中没有结果  只能是调用失败了  那你解决问题得先看 错误信息

#10


引用 8 楼 hello100866 的回复:
Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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

这里是

引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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


引用 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   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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'];
?>


你看这个例程    写的很清楚     输出参数是存储在会话变量里的   所以你得先  定义会话变量   
我估计这就是你失败的原因


我所有的变量都有定义。

#13


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   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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'];
?>


你看这个例程    写的很清楚     输出参数是存储在会话变量里的   所以你得先  定义会话变量   
我估计这就是你失败的原因


我所有的变量都有定义。


你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");

不是你php的变量 也不是你存储过程里的变量

#1


现在命令行测试下

#2


执行mysql存储过程无结果

我在执行
执行mysql存储过程无结果
就是成功的。

#3


你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

#4


引用 3 楼 totola147 的回复:
你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?

#5


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


目测你是php的开发
我印象中我很久很久以前也遇到过你这个问题 ,最后我翻看了所用的 mysql_driver 的api文档搞清楚了 php中如何调用存储过程  问题最终才解决了  
这里我只能给你提供解决问题的思路和方向  方案是没有的  

你代码截取的不全  我也不知道你用的是 PDO  还是PAO   
假设你是PDO 
你参考这个api 
获取一下错误信息    
http://www.cnblogs.com/echohao/p/6137725.html
拿到错误信息后再说

#6


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 

#7


引用 4 楼 hello100866 的回复:
Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


你是有多懒呀

#8


引用 6 楼 totola147 的回复:
Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 


我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。

#9


引用 8 楼 hello100866 的回复:
Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
1   对于绑定变量的处理,在驱动的api文档里会有描述因该怎样传惨
2   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了http://blog.csdn.net/hqulyc/article/details/5587167

要先绑定变量  然后execute  绑定变量时注意属性设置  in  out   inout 


我不是用PDO,我就是用的mysqli来操作的。
兄弟,这个问题我找了很多资料,php手册里的mysqli 存储过程 out 参数我都执行成功了。但是我写的这个代码就不行。


你有没有获取一下错误信息 还是错误信息是空的   运行确实成功了  你有办法确定运行是成功的还是失败的吗   
我们这样讲
抛开php   你命令行调用  如果能够成功的话 说明过程没有问题  所以php中没有结果  只能是调用失败了  那你解决问题得先看 错误信息

#10


引用 8 楼 hello100866 的回复:
Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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

这里是

引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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


引用 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   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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'];
?>


你看这个例程    写的很清楚     输出参数是存储在会话变量里的   所以你得先  定义会话变量   
我估计这就是你失败的原因


我所有的变量都有定义。

#13


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   没有结果其实可能是非预期的运行,产生了错误,而你没有去获取错误信息,所以你只是看到了非预期运行,而不知道原因

能具体说说解决方案吗?


替你找到了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


引用 10 楼 totola147 的回复:
Quote: 引用 8 楼 hello100866 的回复:

Quote: 引用 6 楼 totola147 的回复:

Quote: 引用 4 楼 hello100866 的回复:

Quote: 引用 3 楼 totola147 的回复:

你这使用了数据库驱动,有几点需要注意
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'];
?>


你看这个例程    写的很清楚     输出参数是存储在会话变量里的   所以你得先  定义会话变量   
我估计这就是你失败的原因


我所有的变量都有定义。


你没有理解,是在调用存储过程前需要先定义会话变量
对应的例程中:$mysqli->query("SET @msg = ''");

不是你php的变量 也不是你存储过程里的变量