我正在使用PDO执行查询,该查询无法通过PHP检索任何结果,但可以在phpMyAdmin中使用。
我可以确定连接设置,因为它不是脚本的第一个查询,而其他查询可以正常工作。
这里的PHP代码:

        $retour = array();
        $filters = array();
        $filters['media_type'] = 'mytype';
        $filters['libelle'] = 'sometext';
        $start = 0;
        $count = 9;

        $sql = "SELECT * FROM ".DB_PROD_PREFIX.$this->table." t ";
        $sql .= " LEFT JOIN ".DB_PROD_PREFIX.$this->table."_lang l ON t.id = l.id AND l.langue = :langue";
        $sql .= " WHERE 1";
        if (count($filter)>0){
            foreach($filter as $field => $value){
                $sql .= " AND ".$field." LIKE :".$field;
            }
        }
        $sql .= ($order!='' ? " ORDER BY ".$order : '');
        $sql .= ($count != '' ? " LIMIT ".($start != ''?':start':'0').", :count" : '');

        $stmt = $db->prepare($sql);
        if($start != '') $stmt->bindParam('start', $start, PDO::PARAM_INT);
        if($count != '') $stmt->bindParam('count', $count, PDO::PARAM_INT);
        if ($langue != '') $stmt->bindParam('langue', $langue);

        if (count($filter)>0){
            foreach($filter as $field => $value) {
                $f = '%'.$value.'%';
                $stmt->bindParam($field, $f, PDO::PARAM_STR);
            }
        }

        echo $stmt->queryString.print_r($filter, true);

        if (!$stmt->execute()) echo $stmt->errorInfo();
        $res = $stmt->fetchAll();
        foreach($res as $id => $row){
            $retour[]=$row;
        }
        return $retour;


如果我取消设置$ filter数组的两个键之一,则查询工作正常。
这是生成的SQL:

SELECT * FROM table1 t
LEFT JOIN table1_lang l ON t.id = l.id AND l.langue = :langue

WHERE 1
AND media_type LIKE :media_type
AND libelle LIKE :libelle

ORDER BY position LIMIT :start, :count


谢谢你的帮助!

皮埃尔·M。

最佳答案

它并不能更好地工作,但是感谢小费!
这是一段管理LIKE参数有效的代码:

$media_type = '%'.$filter['media_type'].'%';
$stmt->bindParam('media_type', $media_type, PDO::PARAM_STR);
$libelle = '%'.$filter['libelle'].'%';
$stmt->bindParam('libelle', $libelle, PDO::PARAM_STR);


为什么对数组上的foreach进行相同操作不起作用?

if (count($filter)>0){
    foreach($filter as $field => $value) {
        $value = "%$value%";
        $stmt->bindParam($field, $value, PDO::PARAM_STR);
    }
}

关于mysql - PDO Double LIKE与参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28294543/

10-16 15:42