2013-07-25 75 views
0

我可以使用
返回一个函数截断表空

$stmt = $mysqli->prepare("truncate table packed_items"); 

和$语句设置为mysqli_stmt对象,但
如果我尝试

$stmt = $mysqli->prepare("truncate table ?"); 

然后$ stmt是设置为null,statment:

$stmt->bind_param("s", $mytable) 

将与错误崩溃
调用一个非对象的成员函数bind_param()

我正在使用参数化的准备语句选择,插入和更新没有问题。

+1

为什么upvote这个1000s的副本? –

回答

1

你不能绑定任何SQL文字,但数据一个。没有关键字,没有操作员,没有标识符。

如果你真的需要动态截断你的表,不知道名字是否已经存在(因为随机截断表显然是非常糟糕的设计的标志),请检查表名,对照白名单,正确格式化,然后插入一个查询字符串。

+0

你是说可更换参数(?)只能用信息代替,而不是符号名称?准备方法是否让我感到厌烦,因为它知道唯一可以代替(?)的是符号? “糟糕的设计”只是一种开发便利,而不是生产代码,但无论如何都要感谢意见。此外,如果你有一个我打破的规则的链接,那会很好。通过“插入”你是指字符串连接? – godzilla

+0

是的,不能在准备好的语句中使用表名。 找到这个: http://forums.mysql.com/read.php?10,269185,269185 – godzilla