Я пишу простую функцию, чтобы добавить столбец в таблицу, используя PHP с PDO для подготовки запроса.
Соединение ( $dbh
) работает, другие запросы, которые не связаны с параметрами, работают. Однако важный запрос, который добавляет столбец, не работает.
Когда я проверяю базу данных, есть новый столбец с столбцом с именем ?
(т.е. только вопросительный знак) и все атрибуты, которые я указал.
Я проверил, чтобы переменная $column
проходила правильно, и, кроме того, оператор execute возвращает false, поэтому, как утверждается, оператор не работает, но как-то столбца все еще создается.
Информация об ошибке не очень полезна (по крайней мере для меня):
Array ( [0] => 00000 ).
Я прочесывал код для простых опечаток, но ничего не вижу. Есть идеи?
$qry='ALTER TABLE `completed` ADD `:column` TINYINT(1) NOT NULL DEFAULT 0'; $stmt = $GLOBALS['dbh']->prepare($qry); $stmt->bindParam(":column",$column,PDO::PARAM_STR); $stmt->execute(); $arr = $stmt->errorInfo(); print_r($arr); $stmt===TRUE ? $return=1 : $return=0;
http://dev.mysql.com/doc/refman/5.6/en/prepare.html говорит:
Маркеры параметров могут использоваться только там, где должны отображаться значения данных, а не для ключевых слов SQL, идентификаторов и т. Д.
По идентификаторам они означают имена баз данных, имена таблиц, имена столбцов, имена индексов, имена разделов и т. Д.
По значениям данных они означают числовой литерал, цитируемый строковый литерал или литерал с датой кавычек.
Чтобы добавить новый столбец, перед тем, как подготовить запрос, вам нужно указать имя этого столбца в строке SQL. Это означает, что вам решать, чтобы в имени столбца не было смешных символов, которые могли бы создать уязвимость SQL-инъекции.