我在一个类中有一个简单的函数:
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语句标准的参数。
不能将列名绑定为参数。你需要做一些类似的事情:
$sql = "SELECT * FROM plantsRecords WHERE " . $this->_selectedMethod . " LIKE ?";
$prq = $db->prepare($sql);
$prq->bindValue(1, $this->_query,PDO::PARAM_STR);
$prq->execute();
您需要确保用户未选择$this->_selectedMethod
。如果它是由用户选择的,那么您将需要将允许的列名列入白名单。