准备好的语句中的fetch_array等价物是什么?

时间:2013-08-21 13:58:06

标签: php pdo

我将fetch_array(MYSQLI_ASSOC)query一起使用,但它不适用于预准备语句。准备好的陈述中的等价物是什么?

2 个答案:

答案 0 :(得分:1)

这是:

$query = "SELECT `users` FROM `table` WHERE `country` = :country";

$stmt = $pdo->prepare($query);
$stmt->execute(array(
   ':country' => $country
));

$result = $stmt->fetch(PDO::FETCH_ASSOC); // Here you define how results are fetched

或者您可以将默认FETCH MODE定义为关联数组,如下所示:

$pdo = new PDO(...);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$result = $stmt->fetch(); // The same thing now

答案 1 :(得分:0)

除了公认的PDO解决方案,这里有一个mysqli:

要记住的第一件事是mysqli准备好的语句要求绑定结果:

  

也可以通过mysqli_result接口检索结果,而不是使用绑定结果。 mysqli_stmt_get_result()返回一个缓冲的结果集。

所以,例如:

$sql = 'SELECT * FROM mytable ORDER BY column LIMIT ?,' . SOME_CONSTANT;

绑定并执行语句后,可以调用get_result():

$stmt = $db->prepare($sql);
$stmt->bind_param('i', $int) || die($db->error);
$stmt->execute()             || die($db->error);
$result = $stmt->get_result();

此时我们在功能上等同于:

if ($result = $db->query($sql)) {

可以打电话给我们熟悉的fetch_array:

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $results[] = $row;
}

我们不会像在未准备的等价物中那样关闭结果,而是关闭语句:

$stmt->close();