在PDO准备语句中使用星号作为值

时间:2013-01-05 20:24:44

标签: php pdo prepared-statement

我正在编写一个带有两个参数的函数,第一个是用户的id(默认为%),第二个是应该检索哪些字段(默认为*)。第一个参数工作正常,但出于某种原因,当我尝试使用星号作为预处理语句的参数值时,我得到奇数结果(如下所示)。我有什么理由不能在准备好的声明中使用星号但可以使用百分号吗?我的功能如下:

public function getMembers($id = '%', $fields = '*') {
    $sql = 'SELECT ?
        FROM members
        WHERE members.member_id LIKE ?;';

    return $this->executeQuery($sql, array($fields, $id));
}

这是executeQuery函数:

public function executeQuery($query, array $parameters = array(), $fetch_type = PDO::FETCH_ASSOC) {
    $result = array();

    $sth = $this->handle->prepare($query);

    if($sth->execute($parameters)) {
        while($row = $sth->fetch($fetch_type)) {
            array_push($result, $row);
        }
    }

    return $result;
}

最后结果如果我使用默认的星号:

Array
(
    [0] => Array
        (
            [*] => *
        )

)

1 个答案:

答案 0 :(得分:2)

参数表现为值。字段名称是标识符,而不是值,因此您所做的最终表现如下:

SELECT '*' FROM ...

当然没用。

如果需要将字段名称传递给PDO查询,则需要适当地转义它们并将它们插入到查询中。但理想情况下,您的代码应该构造成不必要的。