比方说,我有一份声明,在这种情况下,一个从特定数据库表中选择照片信息:使用可变数据的查询,以取代硬编码表名
$conn = dbConnect('query');
$bgImage = "SELECT photo_fname
FROM photos_bn
WHERE gallery_id = ?
LIMIT $curPage,".$totalPix;
$stmt = $conn->prepare($bgImage);
$stmt->bind_param('i', $gallery);
$stmt->bind_result($pFname);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
而且,由于我在我的数据库中有几个处理特定照片主题的表格,人们会认为我需要为每个表格分别查询。上面的代码从表中选择信息,photos_bn
,但我有其他表格,我们将其称为photos_bq
和photos_ps
。
这可能是一个非常明显的问题,但我该如何去替换一个变量,该变量可以通过查询字符串或会话变量传递给页面,以便查询中的表名不会被硬编码,但是是一个准备好的声明的一部分?
非常感谢!
谢谢!我想我应该是更具体的......我想要一个解决方案是一个准备好的声明。我很清楚SQL注入的危险,并且在处理变量时只使用预处理语句。 – wordman 2013-05-02 19:48:29
只是跑过这篇文章,想要更新它。有一个SO文章[这里](http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement),说我们不能参数化表名带有占位符的查询。如果表名来自用户输入,则首先检查一张表的白名单,然后回答。所以这是正确的答案! – wordman 2015-01-28 04:30:00