我正在使用mysql存储过程运行查询:
$AddProf_qr = mysql_query("call AddStudent('$d_Pass', '$d_Titl', '$d_Firs', '$d_Midd', '$d_Last', '$d_Addr', '$d_City', '$d_Stat', '$d_County', '$d_Zipc', $d_Gend, '$d_Birh', '$d_Phom', '$d_Phoh', '$d_Phoo', '$d_Email', '$d_Webs', '$d_Natn', '$d_Profsn', '$d_Compny', '$d_Desig', $d_ProfAcc)", $this->c_remote) or die ("first call" . mysql_error($this->c_remote));
我应该从电话中得到一个结果:@@ IDENTITY =一个数字;
$AP_result = mysql_fetch_array($AddProf_qr);
$CurrentSID = $AP_result['@@IDENTITY'];
工作正常。但是当我在此之后运行另一个mysql更新查询时,它会出错:
错误:2014(CR_COMMANDS_OUT_OF_SYNC) 消息:命令不同步;你现在不能运行这个命令
我试过插入:
mysql_free_result($AddProf_qr);
但仍然相同。
MySQL调用也可以正常执行 脚本的其余部分运行没有问题,上面已注释掉。但它们不会同时运行。我最好的猜测是,这个电话正在做一些弄乱这个问题的事情。
答案 0 :(得分:8)
答案 1 :(得分:2)
@DMin是的,这样可行,但你迟早会崩溃服务器。 只需进行数学运算,一个页面就可以对数据库进行3 *个程序! 试想吧!
[更新]解决方案:
$aCategory = array();
$it=0;
$res = $mysqli->multi_query( "call ListCategory();" );
if( $res ) {
do {
if ($result = $mysqli->store_result()) {
while( $row = $result->fetch_row() ) {
$aCategory[$it] =$row;
$it= $it + 1;
}
$result->close();
}
} while( $mysqli->next_result() );
}
foreach($aCategory as $row){
echo . $row[0] . " - " . $row[1] . "<br />";
}
只是想补充说你准备打电话给下一个例程。
PS:通过这种方式我无法使用
echo $aCategory['category_id'] ;
//or
echo $aCategory->category_id;
//just
echo $aCategory[0]
答案 2 :(得分:0)
点击这里:http://us3.php.net/manual/en/function.mysql-query.php在评论中,有人声称他通过将连接标志设置为MYSQL_MULTI_RESULTS(131072)来使其工作。
但是使用mysqli会好得多......
答案 3 :(得分:0)
了mysql_free_result(客户端 - &GT; RES);
while (mysql_more_results(client->conn))
{
mysql_next_result(client->conn);
}
这给我带来了魅力:)
答案 4 :(得分:0)
使用mysqli_query()无法正确获取从存储过程返回的结果集。 mysqli_query()函数将语句执行和将第一个结果集提取到缓冲结果集(如果有)中。但是,用户隐藏了其他存储过程结果集,导致mysqli_query()无法返回用户预期的结果集。
使用mysqli_real_query()或mysqli_multi_query()获取从存储过程返回的结果集。这两个函数都允许获取语句返回的任意数量的结果集,例如CALL。