为什么不能使用预处理语句(基于ALTER TABLE)从PHP设置MySQL字段的默认值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么不能使用预处理语句(基于ALTER TABLE)从PHP设置MySQL字段的默认值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1391字,纯文字阅读大概需要2分钟。
内容图文
我正在编写PHP代码来更改MySQL数据库中varchar字段的默认值.为了使代码安全,我使用了一个准备好的语句,但由于某种原因,在这种特殊情况下似乎不可能让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);
任何人都可以告诉我为什么在这里使用准备好的语句不起作用,以及我需要改变什么(如果可能的话?)使它与预备语句一起工作?
解决方法:
实际上,从docs关于准备好的陈述:
In general, parameters are legal only in Data Manipulation Language (DML) statements, and not in Data Definition Language (DDL) statements.
因此,DDL预处理语句中的bind参数不起作用.我认为您需要使用preg_match验证参数,以通过“不安全”的方式执行.
内容总结
以上是互联网集市为您收集整理的为什么不能使用预处理语句(基于ALTER TABLE)从PHP设置MySQL字段的默认值?全部内容,希望文章能够帮你解决为什么不能使用预处理语句(基于ALTER TABLE)从PHP设置MySQL字段的默认值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。