在过去的几天里,我看到了几个问题,mysqli
但这些问题的答案似乎没有认识到$stmt->execute()
和之间的区别$db->query()
。
据我了解,有两种不同的模型可用于访问mysqli
.
这个使用原始 SQL 并要求程序员转义输入以防止 SQL 注入攻击,但允许程序员检索包含column => value
映射的关联数组(或普通数组):
$result_set = $db->query("SAFE SQL QUERY HERE");
while ($row = $result_set->fetch_assoc()) {
# do something with $row['fieldname'];
}
或者,您可以这样做,它允许很好地绑定参数和结果,但不能(AFAIK)为您提供任何类型的简单数组结果:
$stmt = $db-prepare("SQL QUERY WITH ? PLACEHOLDERS");
$stmt->bind_param("s", $input_variable);
$stmt->execute();
$stmt->bind_results($output_col1, $output_col2);
while ($stmt->fetch()) {
# do something with $output_col1 and $output_col2
}
我的问题是 - 有没有办法mysqli
获得第一个模式中显示的简单数组输出,但仍然按照第二个模式使用安全绑定的输入参数?
我无论如何都找不到这样做(除了PDO
改用!)。