1

我正在编写一个带有两个参数的函数,第一个是用户的 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
        (
            [*] => *
        )

)
4

1 回答 1

2

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

SELECT '*' FROM ...

当然,这是没有用的。

如果您需要将字段名称传递到 PDO 查询中,则需要适当地转义它们并将它们插入到查询中。但是,理想情况下,您的代码应该结构化,这样就没有必要了。

于 2013-01-05T20:34:06.157 回答