【发布时间】:2011-01-13 07:11:47
【问题描述】:
我正在尝试编写一个多功能在允许进行的查询中,而且不会被注入的函数em>。下面的代码会按原样引发错误,但如果我使用 'name' 而不是 ':field' 运行它,它可以正常工作。
$field = "name";
$value = "joe";
function selectquery($field, $value)
{
global $dbcon;
$select = $dbcon->prepare('SELECT * FROM tester1 WHERE :field = :value');
if($select->execute(array(':field' => $field, ':value' => $value)));
{
$row = $select->fetch();
for ($i=0; $i<3; $i++)
{
echo $row[$i]."\n";
}
}
}
如何在不允许注入攻击的情况下更改表/字段/值? mysql_real_escape_string() 似乎有点倒退。有什么想法吗?
【问题讨论】:
-
我建议做一个 echo "SQL statement: " 。 $选择->查询字符串;您很快就会明白为什么您的查询不起作用:)。正如其他人所提到的,没有专门用于标识符转义的功能,只需要有创意并自己创建一些东西。
标签: php mysql pdo sql-injection prepared-statement