php - PDO,在我准备好的陈述中找不到问题

标签 php mysql pdo

我正在尝试制作简单的搜索功能,但出现错误我找不到原因。

我检查了结果 SQL 查询是否正确生成。但是,执行此准备好的语句会导致未知故障。为什么此 execute() 返回 false?

public function searchConcept(string $cplx = '', string $name = '', string $desc = '', int $page = 0)
{
    $SQL = 'select * from concept ';
    $SQL_criteria = array();

    // Criteria
    if($cplx) { $SQL_criteria[] = 'cplx:cplx'; }
    if($name) { $SQL_criteria[] = 'name like :name'; }
    if($desc) { $SQL_criteria[] = 'description like :desc'; }
    if($SQL_criteria) { $SQL .= 'where '.implode(' and ', $SQL_criteria).' '; }

    $SQL .= 'limit :page, 15';

    $stmt = $this->db->prepare($SQL);

    if($cplx) { $stmt->bindValue(':cplx', $cplx); }
    if($name) { $stmt->bindValue(':name', '%'.$name.'%'); }
    if($desc) { $stmt->bindValue(':desc', '%'.$desc.'%'); }

    $stmt->bindValue(':page', $page*15);

    if($stmt->execute()) {
        $rst = $stmt->fetchAll(\PDO::FETCH_OBJ);
        return $rst;
    } else {
        throw new DBRFError();
    }
}

DBRFError 是我制作的自定义错误类。

#

加 1。#### 我认为 cplx:cplx 无关紧要。 $cplx 的值类似于“>5”。 我实际上并没有测试这种情况,但我只是在没有 cplx block 的情况下进行了测试,但也导致了错误。

#

添加 2。#### 我只是找到问题的根源。 $SQL .= 'limit :page, 15'; 它会导致错误。我这样做是为了分页。没有这个 block ,代码运行良好。但是,我不明白为什么。

最佳答案

您的 where 子句中缺少“=”。这是固定的代码:

 if($cplx) { $SQL_criteria[] = 'cplx=:cplx'; }

关于php - PDO,在我准备好的陈述中找不到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701521/

相关文章:

javascript - 将 PHP 数组发送到 Javascript

php - 持护照的多用户 - 如何获取经过身份验证的用户类型

php - 向MYSQL中插入字符串和数组的组合

php - PDO INSERT ON DUPLICATE KEY UPDATE 仅插入和更新 6 行

php - 连接不同数据库上的表,同时绑定(bind)值

php - 如何在 yii 查询中按列值分组?

php - 为什么我的文件在尝试使用 PHP 读取时总是为空?

php - 在基于WEB的应用程序中使用PHP进行MY SQL数据库连接

php - 如何删除供应商表中的特定行数据导致错误是当我使用订单时删除了数据库中的所有供应商数据

mysql_query 语法变体 : at, 引号和大括号