Prepared语句不提取数据

时间:2017-09-01 14:38:28

标签: php mysql mysqli prepared-statement

someVar=\"2.60.3\"

好的,我们走了。这段代码不起作用,因为我基本上得到一个错误告诉我跟随

$id = $_REQUEST['id'];

$stmt = $conn->prepare('SELECT * FROM test WHERE id = ?');
echo $id;
$stmt->bind_param('s', $id);

$stmt->execute();

// This is line 12
while ($row = $stmt->fetch()) {
    $test = $row['test'];
}

我不知道我做错了什么,但我已经尝试了#0 /example/example.php(2): require() #1 {main} thrown in /example/example.inc.php on line 12 bind_result()这些也没有用。我在这里读了很多其他的问题,但是他们没有帮助我。

这是连接

$stmt->fetch_assoc()

2 个答案:

答案 0 :(得分:0)

你没有做好准备好的陈述,请看:

 $id = $_REQUEST['id'];

    $stmt = $conn->prepare('SELECT col1,col2,col3 FROM test WHERE id = ?');
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $stmt->bind_result($col1,$col2,$col3);  // you need to bind the result when using prepared statements
    $stmt->store_result();  // store it so if the number of rows retrieved is large they won't be dropped during loop or cause the overload error


    while ($stmt->fetch()) {
        $test = $col1;
         echo $col2;
    }

$stmt->close();

答案 1 :(得分:0)

使用MySQLi预处理语句时,它与使用标准查询略有不同。您需要使用mysqli_stmt::bind_result(),或将结果集存储为mysqli_stmt::get_result(),然后才能在获取结果时使用数据。请注意,您需要使用MySQL本机驱动程序mysqlnd才能使用get_result() - 否则您需要使用bind_result()手动绑定每个列。

以下是如何使用bind_result()的示例。请注意,您需要绑定与查询中一样多的列,并且由于您执行SELECT *,因此需要绑定表中的所有内容 - ,该方法将失败如果您以后在表中添加一列。因此,最好只选择所需的列,例如SELECT id, test FROM..

$id = $_REQUEST['id'];

$stmt = $conn->prepare('SELECT test, id FROM test WHERE id = ?');
$stmt->bind_param('s', $id);

$stmt->execute();
$stmt->bind_result($test, $result_id);
$stmt->fetch()); 

/*
* If there was any matching rows, the variables defined in bind_param()
* now hold the values
* You can then use '$test' and '$result_id'
*/
echo $test;

$stmt->close();

如果您安装了MySQL本机驱动程序,则可以使用get_result()并将其用作“常规”查询。如果你做SELECT *那就没那么重要了(虽然我不建议你选择所有的东西 - 你应该选择你需要的列,而不是更多)。

$id = $_REQUEST['id'];

$stmt = $conn->prepare('SELECT * FROM test WHERE id = ?');
$stmt->bind_param('s', $id);

$stmt->execute();
$result = $stmt->get_result(); // $result is now an object of MySQLi resource, and not MySQLi statement
                               // It can now be used as as the result-set of a regular query

$row = $result->fetch_assoc());
$test = $row['test'];
echo $test;

$stmt->close();