PDO在获取时返回false

时间:2011-04-22 18:58:57

标签: php pdo

我有这个方法:

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)

所有值都符合预期。

1 个答案:

答案 0 :(得分:2)

您不能将绑定参数用作标识符。现在,您的代码正在说$columname = $value而不是所需的{value of $columname} = $value。您无法绑定标识符。如果要接受变量列名称,最佳解决方案是将输入列入已知列名称的白名单,然后引用它。所以:

if (in_array($columnName, $columns)) {
    $sql .= '`' . $columnName . '` = :value';
} else {
    die('illegal column');
}