PDO Mysql WHERE LIKE查询实现

时间:2013-11-30 13:52:32

标签: php mysql pdo

我在课堂上有这个简单的功能:

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语句标准的参数。

1 个答案:

答案 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。如果用户选择了它,则需要将允许的列名称列入白名单。