首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能使用准备好的语句(基于ALTER )来设置MySQL字段的默认值?

问为什么不能使用准备好的语句(基于ALTER )来设置MySQL字段的默认值?
EN

Stack Overflow用户
提问于 2016-01-16 03:07:53
回答 1查看 1.5K关注 0票数 4

我正在编写PHP代码,以更改MySQL数据库中varchar字段的默认值。为了保证代码的安全,我使用了一个预先准备好的语句,但由于某些原因,在这种特殊情况下,似乎不可能让PHP/MySQL接受这一点,为什么呢?

(我使用的是PHP 5.5.11)

下面是使用准备语句的代码,这些语句不起作用( mysqli_stmt_execute()调用返回null,字段的默认值保持不变):

代码语言:javascript
复制
$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,并且字段的默认值确实被更改):

代码语言:javascript
复制
$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);

有人能告诉我为什么这里不使用预先准备好的语句,以及我需要更改什么(如果可能的话)?让它和事先准备好的陈述一起工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-16 03:28:39

实际上,关于准备好的语句的文档:

通常,参数仅在数据操作语言(DML)语句中合法,而在数据定义语言(DDL)语句中不合法。

因此,DDL准备语句中的bind参数不应该工作。我认为您需要用preg_match验证参数,才能通过“不安全”的方式执行。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34823112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档