【问题标题】:Uncaught PDOException: SQLSTATE Syntax error or access violation未捕获的 PDOException:SQLSTATE 语法错误或访问冲突
【发布时间】:2021-05-14 15:26:24
【问题描述】:

当我使用 select 时出现此错误

$listchat = $pdo->prepare("SELECT * FROM listchat WHERE ?, userkey=?, ORDER BY idroom ASC LIMIT ?");

然后

$num = 10;
$gid = 0;
$listchat->execute([$gid,$userKey,$num]);

我收到帖子标题错误,我错在哪里?

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'userkey='66756' 附近使用的正确语法,

【问题讨论】:

    标签: php sql select


    【解决方案1】:

    您缺少要与$gid 进行比较的列。并且条件使用ANDOR 组合,而不是逗号。

    $listchat = $pdo->prepare("
        SELECT * 
        FROM listchat 
        WHERE gid = ? AND userkey=? 
        ORDER BY idroom ASC 
        LIMIT ?");
    

    您还需要使用bindParambindValueLIMIT 提供一个值,因此您可以指定它应该被视为一个整数,而不是一个字符串。

    $listchat->bindValue(1, $gid);
    $listchat->bindValue(2, $userKey);
    $listchat->bindValue(3, $num, PDO::PARAM_INT);
    $listchat->execute();
    

    【讨论】:

    • 我按照你写的做了 $listchat = $pdo->prepare("SELECT * FROM listchat WHERE idroom > ? ABD userkey=? ORDER BY idroom ASC LIMIT ?");但我总是得到错误
    • 是真实代码中的ABD错字还是复制错误?
    • 不要更改问题以匹配答案,其他读者怎么会知道我在解决什么问题?我已恢复您的编辑。
    • 您是否仍然遇到相同的错误或不同的错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多