【问题标题】:PHP - PDO - MYSQL - Syntax error or access violation: 1064PHP - PDO - MYSQL - 语法错误或访问冲突:1064
【发布时间】:2017-03-06 09:16:33
【问题描述】:

我要为这个错误而生气...

=> PDOStatement::execute(): SQLSTATE[42000]: 语法错误或访问冲突:1064

我已经在 HeidiSql 中执行了这个查询并且它有效...我错了什么??
之前谢谢你...

$sql = "select *
            from projects pr
            join projectTexts prt on pr.idProject = prt.idProject
            join images img on pr.idImage = img.idImage
            where ";
    if($idProject != '#')
        $sql .= "pr.idProject = :idp and ";
    if($status != '#') {
        $sql .= "pr.status = :sts and ";
    }
    $sql .= "prt.idLanguage = :idl
            order by pr.idProject desc
            limit :qt";
    $getProjectWithTexts = $db->prepare($sql);
    if($idProject != '#')
        $getProjectWithTexts->bindParam(':idp',$idProject);
    if($status != '#')
        $getProjectWithTexts->bindParam(':sts',$status);
    $getProjectWithTexts->bindParam(':idl',$idLanguage);
    $getProjectWithTexts->bindParam(':qt',$qt);
    $getProjectWithTexts->execute();
    return $getProjectWithTexts;

【问题讨论】:

  • 你为什么只发布了一个错误消息的存根?为什么你忽略了最有用的部分?
  • 回显您的查询 ($sql),并检查以确保它看起来不错。尝试在命令行或 phpmyadmin 中运行它并替换正确的绑定。它有效吗?检查完整的错误消息。它在哪里说它正在崩溃?
  • "select * from projects pr join projectTexts prt on pr.idProject = prt.idProject join images img on pr.idImage = img.idImage where" 'where' 什么?
  • @aynber 我在 HeidiSQL 中写过它可以工作...
  • 我不认为您在 heidisql 中使用 if 语句执行了上述代码。您执行了一条不同的 sql 语句。因此,出于调试目的,您需要考虑完整的错误消息和执行的最终 sql 语句。由于我们没有这些信息,我们无法为您提供帮助。

标签: php mysql pdo


【解决方案1】:

我的问题是对的,解决方案是对于带有“限制”的 bindParam,您必须设置:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2023-03-26
    • 1970-01-01
    • 2017-07-26
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多