php 数据库状态[42000]:语法错误或访问冲突:小行星1064

mm9b1k5b  于 2023-02-21  发布在  PHP
关注(0)|答案(2)|浏览(102)

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

    • 错误日志文件:**
[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
    • 脚本. 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

预先感谢你的帮助。

ltqd579y

ltqd579y1#

即使MySQL语法是正确的,也不要写这样的代码。2总是准备好你的查询以保证它的安全!
试试这个例子:

$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呢?请保持干净...

3pvhb19x

3pvhb19x2#

您也可以像这样尝试使用prepare()execute()方法执行查询。

$dripfeedvarmi = $conn->prepare("SELECT * FROM demo WHERE user=:user and dripfeed=:dripfeed");
$dripfeedvarmi->execute([':user'=>$user_id,':dripfeed'=>2]);
        if ($dripfeedvarmi->rowCount()>0)
        {
            $dripfeedcount = 1;
        }
        else
        {
            $dripfeedcount = 0;
        }

相关问题