我正在编写一个带有两个参数的函数,第一个是用户的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
(
[*] => *
)
)
答案 0 :(得分:2)
参数表现为值。字段名称是标识符,而不是值,因此您所做的最终表现如下:
SELECT '*' FROM ...
当然没用。
如果需要将字段名称传递给PDO查询,则需要适当地转义它们并将它们插入到查询中。但理想情况下,您的代码应该构造成不必要的。