我使用fetch_array(MYSQLI_ASSOC)
withquery
但它不适用于准备好的语句。准备好的语句中的等价物是什么?
问问题
327 次
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 回答