Почему невозможно использовать подготовленные операторы (основанные на ALTER TABLE) для установки значений по умолчанию для полей MySQL из PHP?

Я пишу код PHP, чтобы изменить значение по умолчанию для поля varchar в базе данных MySQL. Для того, чтобы код был безопасным, я использую подготовленное утверждение, но по какой-то причине, по-видимому, невозможно заставить PHP / MySQL принять это в данной конкретной ситуации, почему так?

(Я использую PHP 5.5.11)

Вот код, использующий подготовленные операторы, который НЕ работает (вызов mysqli_stmt_execute () возвращает значение null, а значение по умолчанию для поля остается неизменным):

$new_field_default_value = 'test';
$field_modification_sql_command = "ALTER TABLE MyTable ALTER COLUMN MyColumn SET DEFAULT ?";
$stmt = mysqli_stmt_init($db_conn_handle);
mysqli_stmt_prepare($stmt, $field_modification_sql_command);
mysqli_stmt_bind_param($stmt, 's', $new_field_default_value);
$temp_db_res = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

Вот (небезопасный) код, использующий конкатенацию и чистое выполнение запроса, который работает (вызов mysqli_query () возвращает true, и значение поля по умолчанию действительно изменено):

$new_field_default_value = 'test';
$field_modification_sql_command = "ALTER TABLE MyTable ALTER COLUMN MyColumn SET DEFAULT '" . $new_field_default_value . "'";
$temp_db_res = mysqli_query($db_conn_handle, $field_modification_sql_command);

Может ли кто-нибудь сказать мне, почему это не работает, чтобы использовать подготовленные утверждения здесь, и что мне нужно изменить (если вообще возможно?), Чтобы заставить его работать с подготовленным утверждением?

4

Решение

На самом деле, из документы о подготовленных заявлениях:

В целом, параметры допустимы только в инструкциях на языке манипулирования данными (DML), а не в инструкциях на языке определения данных (DDL).

Таким образом, параметр связывания в подготовленном выражении DDL не должен работать. Я думаю, вам нужно проверить параметр с preg_match выполнить «небезопасным» способом.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]