微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

放置表php的绑定变量

如何解决放置表php的绑定变量

| 我正在编写用于与MysqL数据库一起使用的PHP脚本。我唯一的问题是绑定变量以放置表/创建表等。
    $stmt = $link->prepare(\"DROP TABLE ?\");
    $stmt->bind_param(\'s\',\'testing\'); 
    $stmt->execute();
不管用。我也尝试过:
SELECT * FROM (SELECT MAX(name) from profiles where name=\'testing\') <- is working
DROP TABLE (SELECT MAX(name) from profiles where name=\'testing\') <- dont work
    

解决方法

绑定参数不同于仅替换字符串的一部分:您不能仅绑定所需的任何内容。 在这种情况下:不能为表名使用绑定参数-您将必须使用字符串串联来构建查询,而不是使用准备好的语句。 作为参考,引用
PREPARE
语法:   参数标记只能使用   数据值应出现的位置,而不是   用于SQL关键字,标识符等   向前。     ,据我所知,您只能绑定到参数,而不能绑定到查询的任何部分。您实际上是在告诉数据库“嘿,我要在这里向您传递一个值,我希望您尽力确保它不会超出范围”。诸如表名或字段名之类的东西不是值,它们是表结构本身的一部分。 在这种情况下,您只需要使用简单的
$query = \"DROP TABLE \" . $table;
。检查已知表的列表应该足够容易,以确保您没有注入有害的东西。就我而言,任何进行DDL更改的操作都不应从用户那里获取输入。这些变化可以基于用户输入,但是查询的实际构造应该是众所周知的,并且不需要外部数据来构造。 另外,我不太确定您要使用此查询做什么:
DROP TABLE (SELECT MAX(name) from profiles where name=\'testing\');
看起来您可能正在尝试删除一条记录,但这完全是错误的语法。如果您要删除一个名称来自另一个查询结果的表,我真的不认为您也可以这样做。我99%确信
DROP TABLE
期望仅使用文字表名值。     ,您确定要动态删除表吗? 这是非常不寻常的。 看来您的数据库设计错误。 现在,您面临一个后果。 似乎应该有一个表
users
,并从中删除行,而不是表。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。