0

我在绑定参数或值时遇到问题,有人知道什么问题吗?如果我改变?到它工作的区域:-$

$item = 'area';
$query = dbConnectionPDO::getConnect()->prepare( ' SELECT * FROM  ? ' );
$query->bindParam(1, $item, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}

这是一个好的解决方案吗?有用!

$select = 'select * from ' . $item . ' left join ' . $TableName . ' ';

$query = dbConnectionPDO::getConnect()->prepare("$select ON :three = :four");
$query->bindValue(':three', $three, PDO::PARAM_STR);
$query->bindValue(':four', $four, PDO::PARAM_STR);
$query->execute();

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){
    ////
}
4

3 回答 3

2

您正在尝试绑定表名,而不是参数。我不确定你真的能做到这一点。

bindParam通过绑定问号持有者命名参数来工作,而不是表名。

$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();

如果您只是在研究占位符“替换”,您可以使用 sprintf,但要小心,因为如果您会做任何可疑或愚蠢的事情(例如从外部来源接受表名),它可能会泄漏。

例如:

$theQ = "SELECT * FROM `%s` LEFT JOIN `%s` ON `%s` = `%s`";
$runQ = sprintf($theQ, 'one', 'two', 'three', 'four');
于 2012-11-13T09:49:25.570 回答
1

您需要提供一个有效的 SQL 语句,其中仅对文字进行了参数化。即使数据库驱动程序愚蠢到可以接受查询,您最终也会执行以下操作:

SELECT * FROM 'area'

...这显然不是你想要的。

于 2012-11-13T09:51:24.167 回答
0

您不能参数化表名,只能参数化。

于 2012-11-13T09:48:49.383 回答