За последние несколько дней я видел пару вопросов, в которых использовался 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
вместо этого!).