0

我使用fetch_array(MYSQLI_ASSOC)withquery但它不适用于准备好的语句。准备好的语句中的等价物是什么?

4

2 回答 2

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

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

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

$result = $stmt->fetch(); // The same thing now
于 2013-08-21T14:06:45.453 回答
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();
于 2013-09-10T14:04:47.250 回答