@aspirantes

Как правильно вписать переменную для экранирования подготовленного запроса?

$stmt = $connection->prepare("CREATE TABLE ? ( id INT(16) NOT NULL , count INT(16) NOT NULL ) ENGINE = InnoDB;");
          $stmt->bind_param('s', 'db1.'.$table1);
          $stmt->execute();
          $stmt->close();


Fatal error: Uncaught Error: Call to a member function bind_param() on bool in
  • Вопрос задан
  • 87 просмотров
Решения вопроса 2
DevMan
@DevMan
плейсхолдерами могут быть только значения полей, но не имена полей/таблиц/etc.
то есть ваш запрос все равно не выполнится, даже с правильным экранированием.

имена полей принято заключать в обратные кавычки для избежания конфликтов c ключевыми словами самого SQL.
Ответ написан
@eyuioa
Никак, придётся подставлять переменную вручную, предварительно отсекая из неё всё лишнее. Так как для названия таблицы можно использоваться только [A-z_0-9], проблем с фильтрацией не возникнет
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы