我有这个方法:
protected function _getByColumn($columnName, $value)
{
$sql = "SELECT * FROM $this->__tableName
WHERE :column = :value";
$stmt = $this->__db->prepare($sql);
$stmt->execute(array(':value' => $value, ':column' => $columnName));
$val=$stmt->fetch(PDO::FETCH_OBJ);
var_dump($val); //getting boolean false
}
我在做PDO电话的方式上做错了吗?我有输出$columnName
和$value
以及echod $sql
,手动重播:column
和:value
,一切正常。建议?
编辑:
string 'SELECT * FROM myTable
WHERE :column = ':value'' (length=61)
string 'blog_id' (length=9)
string 'a3sasidsf' (length=8)
所有值都符合预期。
答案 0 :(得分:2)
您不能将绑定参数用作标识符。现在,您的代码正在说$columname = $value
而不是所需的{value of $columname} = $value
。您无法绑定标识符。如果要接受变量列名称,最佳解决方案是将输入列入已知列名称的白名单,然后引用它。所以:
if (in_array($columnName, $columns)) {
$sql .= '`' . $columnName . '` = :value';
} else {
die('illegal column');
}