【问题标题】:SQLSTATE[42000]: Syntax error or access violation: 1064 ErrorSQLSTATE[42000]:语法错误或访问冲突:1064 错误
【发布时间】:2022-01-25 17:30:54
【问题描述】:

我在网站上收到以下错误。为此,我在托管服务提供商中创建了票证。它告诉我“您需要编辑选择查询,而不是适合服务器上 mariadb 版本的选择查询。”他们说。

error_log 文件:

 [25-Dec-2021 19:50:24 Europe] PHP Fatal error:  Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'and dripfeed= 2' at line 1 in /home/user/public_html/script.php:461
        Stack trace:
        #0 /home/user/public_html/script.php(461): PDO->query('SELECT * FROM o...')
        #1 /home/user/public_html/index.php(35): require_once('/home/user/...')
        #2 {main}
          thrown in /home/user/public_html/script.php on line 461

script.php 文件:

$dripfeedvarmi = $conn->query("SELECT * FROM demo WHERE user=$user_id and dripfeed=2");
        if ($dripfeedvarmi->rowCount())
        {
            $dripfeedcount = 1;
        }
        else
        {
            $dripfeedcount = 0;
        }

当前数据库版本: 10.2.41-MariaDB-cll-lve
PHP 版本: 7.4.25
操作系统: Linux

提前感谢您的帮助。

【问题讨论】:

标签: php sql syntax mariadb mariadb-10.2


【解决方案1】:

即使 MySQL 语法是正确的,也不要这样写代码。始终准备好查询以确保其安全!

试试这个例子:

$query = 'SELECT * FROM demo WHERE user = ? AND dripfeed = ?';
$array = array($user_id, 2);

$init = $conn->prepare($query);
$init->execute($array);

$rowCount = $init->rowCount();

if($rowCount > 0){
    $dripfeedcount = 1;
}else{
    $dripfeedcount = 0;
};

另外,如果你存储的是用户的 id,那么为什么列名不是user_id 而不是user?干净...

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2014-01-14
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多