MySQLi multi_query next_result总是返回1

时间:2014-09-04 09:29:11

标签: php mysql sql mysqli

我在MySQL中有一个简单的存储过程。这是它的代码。

CREATE DEFINER = 'root'@'chl.rontel.ru' PROCEDURE `test`()
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
begin
    select * from `mbus_log` where serial_num='12';
    select count(*) from mbus_log;
end;

在MySQL的SQL管理器中,它返回6行表和总行数--293。 所以我想从PHP中获取这些值。这是PHP代码:

    public $mysqli;

...
    $this->mysqli=new mysqli($this->mysql_host,$this->mysql_user,$this->mysql_password,$this->mysql_db);
    if ($this->mysqli->connect_error) 
    {
        die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    }
    $this->mysqli->query("SET NAMES UTF8");
...
        $result= $this->mysqli->multi_query("call test();");
        $getReadingsByAddress=$this->mysqli->store_result();
        if ($this->mysqli->errno) 
        {
            die('Select Error (' . $mysqli->errno . ') ' . $mysqli->error);
        }
        else
        {
            while( $row = mysqli_fetch_object($getReadingsByAddress) )
            { 
                 $res.="<tr><td><a class='serialLink' href='./'>".$row->serial_num."</a></td><td>".$row->value."</td></tr>"; 
            } 
        }
        $getReadingsByAddress->close();
        $res.=$this->mysqli->next_result();

$ mysqli-&gt; store_result()工作正常并返回正确的值,但next_result方法每次返回1。我也试着这样做:

$result= $this->mysqli->multi_query("call test(); SELECT COUNT(*) from mbus_log;");

下一个结果也会返回1.此外,当我尝试var_dump($this->mysqli->next_result());它返回bool(false),但是more_results方法返回true问题是什么?

2 个答案:

答案 0 :(得分:0)

我唯一的想法就是尝试给count(*)一个列名IE count(*)AS MyCount。

答案 1 :(得分:0)

解决:问题是我不明白mysqli的工作原理 - >下一个结果。 这是正确的方式,因为它在文档中:

    $result= $this->mysqli->multi_query("call test();");
    if ($result)
    {
        do
        {
           $getReadingsByAddress=$this->mysqli->store_result();
           var_dump($getReadingsByAddress);
            while( $row = mysqli_fetch_object($getReadingsByAddress) )
            { 
                var_dump($row);
            } 

        if (!$this->mysqli->more_results()) 
        {
             break;
        }
        if (!$this->mysqli->next_result()) 
        {
             // report error
            break;
        }
        } while (true);
    }