我在课堂上有这个简单的功能:
public function getSearchResults($selectedMethod, $query)
{
$this->_query = '%'.$query.'%';
$this->_selectedMethod = $selectedMethod;
$db = mysql_init();
$sql = "SELECT * FROM plantsRecords WHERE ? LIKE ?";
$prq = $db->prepare($sql);
$prq->bindValue(1,$this->_selectedMethod,PDO::PARAM_STR);
$prq->bindValue(2,$this->_query,PDO::PARAM_STR);
$prq->execute();
}
问题是WHERE和LIKE正在发生一些事情。如果我放置标准column_name,则查询有效,但如果我使用?
进行分配则不然。我在这个网站上阅读了所有类似的问题,但是每个人都有WHERE语句标准的参数。
答案 0 :(得分:1)
您无法将列名绑定为参数。您需要执行以下操作:
$sql = "SELECT * FROM plantsRecords WHERE " . $this->_selectedMethod . " LIKE ?";
$prq = $db->prepare($sql);
$prq->bindValue(1, $this->_query,PDO::PARAM_STR);
$prq->execute();
您需要确保用户未选择$this->_selectedMethod
。如果用户选择了它,则需要将允许的列名称列入白名单。