我将fetch_array(MYSQLI_ASSOC)
与query
一起使用,但它不适用于预准备语句。准备好的陈述中的等价物是什么?
答案 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();