Сейчас многие рекомендуют использовать новое расширение MySQLi для запросов к БД, которое обещает нам поддержку всех новых возможностей MySQL, больше удобств и более высокую скорость работы.
Одно мне непонятно: почему для такого «нового» и «крутого» расширения не придумали метод, позволяющий после выполнения подготовленного выражения получать заранее неизвестное количество полей? Я имею ввиду выборку вида:
SELECT * FROM table;
В функцию подготовки результата выражения даже нельзя передать одну переменную-массив, ключи и значения которого стали бы результатом выборки.
В результате если мы имеем таблицу вида:
Поле | Тип |
---|
id | INT(10) |
field1 | VARCHAR(20) |
field2 | VARCHAR(20) |
то при запросе:
$stmt = $mysqli->prepare("SELECT * FROM table WHERE id = ?");
$stmt->bind_param('i', $itemid);
$stmt->execute();
$stmt->bind_result($id, $field1, $field2);
$stmt->fetch();
будет всё нормально. Но стоит нам добавить в таблицу ещё одно поле, как этот же код будет вызывать критическую ошибку несоответствия количества переменных и полей.
Почему так сделано?