【发布时间】:2013-10-01 00:52:25
【问题描述】:
我在 PDO 上使用 prepare 获取 sql 查询时遇到了一点问题,我有以下代码:
$portfolio = $db->prepare("SELECT * FROM `news`, `:sub` WHERE `news`.`id` = `:sub`.`id_news` AND `page` = `:under` ORDER BY `date` DESC LIMIT :start, :limit");
$portfolio->bindParam(':under', $_GET['under'], PDO::PARAM_STR);
$portfolio->bindParam(':sub', $_GET['sub'], PDO::PARAM_STR);
$portfolio->bindParam(':start', $start, PDO::PARAM_INT);
$portfolio->bindParam(':limit', $limit, PDO::PARAM_INT);
$portfolio->execute();
但这并没有给出任何价值,而且我的数据库的值是正确的,有人知道为什么这不起作用吗? PS: var $start 和 $limit 没问题,因为它是分页脚本,在所有页面中都可以正常工作。
例如,我在网址中:mysite.com/index.php?sub=vid&under=info
所以查询应该是这样的:
"SELECT * FROM `news`, `vid` WHERE `news`.`id` = `vid`.`id_news` AND `page` = `info` ORDER BY `date` DESC LIMIT 0, 10"
因此,就我的理解而言,之前拥有此代码应该可以工作并且仍然安全吗?
switch($_GET['sub']){
case "vid":
$table = "vid";
break;
case "img":
$table = "img";
break;
}
$portfolio = $db->prepare("SELECT * FROM `news`, `$table` WHERE `news`.`id` = `$table`.`id_news` AND `page` = :under ORDER BY `date` DESC LIMIT :start, :limit");
【问题讨论】:
-
为什么你有一个动态链接表?你的设计很糟糕,你知道的。
-
您不能将表名与 PDO 绑定;检查stackoverflow.com/questions/182287/…
-
不可能有动态表名,您需要采用不同的方式使这些表名动态化(但正如您的常识所说,最好查看您的数据库结构以及原因你首先需要这种方式。)