使用mysqli_stmt :: store_result会导致mysqli_stmt :: get_result失败

时间:2014-06-22 18:31:19

标签: php stored-procedures mysqli

我试图在相同的代码中使用两个mysqli_stmt :: get_result和mysqli_stmt :: $ num_rows,但它们似乎是互斥的。我已经阅读了post上的文档和答案,但是(与答案相反)它不起作用。注意,安装了mysqlnd驱动程序。

如果我添加以下代码,它将正确显示行数

    $stmt->store_result();
    var_dump($stmt->num_rows)

但以下给出"致命错误:在非对象上调用成员函数fetch_array()"

    $result = $stmt->get_result();
    $row  = $result->fetch_array(MYSQLI_ASSOC);

但是,如果注释掉$stmt->store_result();,我会根据需要获得该行。

如何在不破坏num_rows的情况下获取get_result()

我想这样做的原因是我将现有代码转换为预处理语句并尝试遵循逻辑:

execute query
check number of rows
if num_rows = 0
    return
else
    fetch rows
    do something else

以下是一个示例表:

CREATE TABLE test 
    (
     id int auto_increment primary key, 
     type varchar(20)
    );

INSERT INTO test
(type)
VALUES
('one'),
('two');

显示问题的代码

define("DB_SERVER", "localhost");
define("DB_NAME", "test");
define("DB_USER", "user");
define("DB_PASS", "pass");

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
$type = "one";
$query = "SELECT type FROM test WHERE type=?";
if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param("s", $type);
    $stmt->execute();

    $stmt->store_result();
    var_dump($stmt->num_rows);  // returns 1          

    $result = $stmt->get_result();

    // following gives "Fatal error: Call to a member function fetch_array() on a non-object 
    $row  = $result->fetch_array(MYSQLI_ASSOC);
    var_dump($row);
    $stmt->close();
}

0 个答案:

没有答案