PDO Mysql WHERE LIKE查询实现


PDO Mysql WHERE LIKE query implementation

我在一个类中有一个简单的函数:

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。如果它是由用户选择的,那么您将需要将允许的列名列入白名单。