drop table php的绑定变量

时间:2011-04-14 10:43:53

标签: php mysql variables binding

我正在编写PHP脚本以便与mySQL数据库一起使用。我唯一的问题是drop table / create table的绑定变量等等。

    $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

3 个答案:

答案 0 :(得分:2)

绑定参数与替换字符串的一部分不同:你不能只绑定任何你想要的东西。

在这种情况下:您不能对表名使用绑定参数 - 您必须使用字符串连接来构建查询,而不是使用预准备语句。


作为参考,引用PREPARE Syntax

  

参数标记只能使用   应该出现数据值的地方,而不是   对于SQL关键字,标识符等   类推。

答案 1 :(得分:1)

据我所知,您只能绑定参数,而不能绑定到所需查询的任何部分。你实际上是在告诉数据库“嘿,我会在这里传递一个,我希望你能做到你的魔法,以确保它不会超越它的界限”。表名或字段名之类的东西不是值,它们是表结构本身的一部分。

在这种情况下,您只需使用简单的$query = "DROP TABLE " . $table;即可。应该很容易检查已知表的列表,以确保您没有注入任何有害的东西。无论如何,任何使DDL更改的内容都不应该从用户那里获取输入,就我而言。这些类型的更改可以基于基于用户输入,但查询的实际构造应该是众所周知的,不应该需要外部数据来构建。

此外,我不确定您要对此查询做什么:

DROP TABLE (SELECT MAX(name) from profiles where name='testing');

看起来您可能正在尝试删除记录,但这完全是错误的语法。如果你试图删除一个名字来自另一个查询结果的表,我真的不认为你也可以这样做。我99%确定DROP TABLE只需要一个文字表名称值。

答案 2 :(得分:0)

您确定要动态删除表格吗? 这是非常不寻常的。

您的数据库设计似乎有误 而现在你面临着一个后果。

您似乎应该一个users并从中删除,而不是表格。