Php pdo和like查询

Php pdo和like查询,php,pdo,sql-like,Php,Pdo,Sql Like,我有一个查询,它看起来像: if (strlen($search->q)) { $where[] = ' AND (`name` LIKE :q)'; $arr['q'] = "%" . $search->q . "%"; } $sql = 'SELECT *, FROM `shop_products` WHERE 1=1

我有一个查询,它看起来像:

if (strlen($search->q)) {

    $where[]        = ' AND (`name` LIKE :q)';
    $arr['q']       = "%" . $search->q . "%";
}

$sql = 'SELECT 
                *,
        FROM 
            `shop_products`
        WHERE 
            1=1
            '.implode('', $where);
$result->products   = $db->query($sql, $arr, $search->limitstart, $search->limit)->fetchAll();
public function query($sql, $params=array(), $offset = null, $limit = null){

            if (!is_null($offset) && !is_null($limit)) {
                $sql .= ' LIMIT :limit OFFSET :offset';
                $params['limit']        =  (int)$limit;
                $params['offset']       =   (int)$offset;
            }

            $stmt = $this->database->prepare($sql); 

            if (!empty($params)) {      
                foreach($params as $key => $value) {
                    if(is_int($value)) {
                    $param = PDO::PARAM_INT;
                    } elseif(is_bool($value)) {
                    $param = PDO::PARAM_BOOL;
                    } elseif(is_null($value)) {
                    $param = PDO::PARAM_NULL;
                    } elseif(is_string($value)) {
                    $param = PDO::PARAM_STR;
                    } else {
                        $param = false;
                    }

                    if($param) $stmt->bindValue(":$key", $value, $param);
                }
            }

            $stmt->execute();
            return $stmt;
 }
不是,我正在尝试从DB获得产品:

if (strlen($search->q)) {

    $where[]        = ' AND (`name` LIKE :q)';
    $arr['q']       = "%" . $search->q . "%";
}

$sql = 'SELECT 
                *,
        FROM 
            `shop_products`
        WHERE 
            1=1
            '.implode('', $where);
$result->products   = $db->query($sql, $arr, $search->limitstart, $search->limit)->fetchAll();
public function query($sql, $params=array(), $offset = null, $limit = null){

            if (!is_null($offset) && !is_null($limit)) {
                $sql .= ' LIMIT :limit OFFSET :offset';
                $params['limit']        =  (int)$limit;
                $params['offset']       =   (int)$offset;
            }

            $stmt = $this->database->prepare($sql); 

            if (!empty($params)) {      
                foreach($params as $key => $value) {
                    if(is_int($value)) {
                    $param = PDO::PARAM_INT;
                    } elseif(is_bool($value)) {
                    $param = PDO::PARAM_BOOL;
                    } elseif(is_null($value)) {
                    $param = PDO::PARAM_NULL;
                    } elseif(is_string($value)) {
                    $param = PDO::PARAM_STR;
                    } else {
                        $param = false;
                    }

                    if($param) $stmt->bindValue(":$key", $value, $param);
                }
            }

            $stmt->execute();
            return $stmt;
 }
我的查询功能:

if (strlen($search->q)) {

    $where[]        = ' AND (`name` LIKE :q)';
    $arr['q']       = "%" . $search->q . "%";
}

$sql = 'SELECT 
                *,
        FROM 
            `shop_products`
        WHERE 
            1=1
            '.implode('', $where);
$result->products   = $db->query($sql, $arr, $search->limitstart, $search->limit)->fetchAll();
public function query($sql, $params=array(), $offset = null, $limit = null){

            if (!is_null($offset) && !is_null($limit)) {
                $sql .= ' LIMIT :limit OFFSET :offset';
                $params['limit']        =  (int)$limit;
                $params['offset']       =   (int)$offset;
            }

            $stmt = $this->database->prepare($sql); 

            if (!empty($params)) {      
                foreach($params as $key => $value) {
                    if(is_int($value)) {
                    $param = PDO::PARAM_INT;
                    } elseif(is_bool($value)) {
                    $param = PDO::PARAM_BOOL;
                    } elseif(is_null($value)) {
                    $param = PDO::PARAM_NULL;
                    } elseif(is_string($value)) {
                    $param = PDO::PARAM_STR;
                    } else {
                        $param = false;
                    }

                    if($param) $stmt->bindValue(":$key", $value, $param);
                }
            }

            $stmt->execute();
            return $stmt;
 }

我的问题是
指令不起作用。如何解决此问题并修复代码

你所说的“类似的指导不起作用”是什么意思?输出是什么?您期望什么?SQL从DB.FYI返回空结果,您可以执行
$stmt->execute($params)
而不是该循环。是否启用了PDO异常?您还可以使用$stmt->errorInfo();