PHP:SQLSTATE [42000]:语法错误或访问冲突:1064

Posted

技术标签:

【中文标题】PHP:SQLSTATE [42000]:语法错误或访问冲突:1064【英文标题】:PHP: SQLSTATE[42000]: Syntax error or access violation: 1064 【发布时间】:2017-10-08 15:15:35 【问题描述】:

我知道有很多关于这个错误的问题,但是堆栈溢出、谷歌等的答案都没有帮助我解决我的问题。也许这里有人可以弄清楚,为什么这个错误不断发生。 我对 php 比较陌生,所以对于小型应用程序,我阅读了很多教程并将它们用于我的案例。

我尝试使用以下教程创建一个注册页面:http://www.codingcage.com/2015/11/ajax-registration-script-using-jquery-php.html

一切都完成后,我总是得到错误

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法!

...当我提交注册时。所以我认为它必须在这部分代码中:

$qry = "SELECT * FROM geraeteuser WHERE `user_email` LIKE :email";
$stmt = $db_con->prepare($qry);
$stmt->execute(array(":email"=>$user_email));

我在这里和那里尝试了所有使用 backtips 的方法,但无论我做什么,它都不起作用。

完整代码如下所示(“geraetestatus”是表名):

<?php

require_once "dbconfig.php";

if($_POST)

    $user_name = $_POST['user_name'];
    $user_email = $_POST['user_email'];
    $user_password = $_POST['password'];

    $password = md5($user_password);

    try
       
        $qry = "SELECT * FROM geraeteuser WHERE `user_email` LIKE :email";
        $stmt = $db_con->prepare($qry);
        $stmt->execute(array(":email"=>$user_email));
        $count = $stmt->rowCount();

        if($count==0)

        $stmt = $db_con->prepare("INSERT INTO `geraeteuser`(user_name,user_email,user_password) VALUES(:uname, :email, :pass");
        $stmt->bindParam(":uname",$user_name);
        $stmt->bindParam(":email",$user_email);
        $stmt->bindParam(":pass",$password);

            if($stmt->execute())
            
                echo "registered";
            
            else
            
                echo "Query could not execute !";
            

        
        else

            echo "1"; //  not available
        

    
    catch(PDOException $e)
        echo $e->getMessage();
    
?>

在包含的文件“dbconfig.php”中,有一个这样创建的pdo:

<?php

$db_host = ***;
$db_name = ***;
$db_user = ***;
$db_pass = ***;

try

    $dsn = "mysql:host=$db_host;dbname=$db_name";

    $db_con = new PDO($dsn, $db_user, $db_pass, array(PDO::ATTR_PERSISTENT => true));
    $db_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

catch(PDOException $e)
    echo $e->getMessage();
?>

有没有人对我提出任何建议来完成这项工作?我尝试了几乎所有可以在这里和谷歌答案中找到的东西,但没有任何帮助。

【问题讨论】:

哪个sql语句产生了错误? 对不起,我忘了提。我想,我填表提交的时候总会出现,所以一定是这个,我想$qry = "SELECT * FROM geraeteuser WHERE 'user_email' LIKE :email"; $stmt = $db_con-&gt;prepare($qry); $stmt-&gt;execute(array(":email"=&gt;$user_email)); @SilvioHungsberg 您是否真的在查询中使用了单引号,或者仅仅是因为 SO cmets 的格式也使用了反引号?你怎么知道它是 SELECT 查询,而不是 INSERT 查询? 这是因为格式化。现在我编辑了startpost。谢谢你到目前为止。我不确切知道错误发生在哪里。这只是一个猜测。你能给我一些建议吗,我怎么能弄清楚呢? 就像我上面问的那样,你怎么确定是 SELECT 查询产生了这个错误,而不是 INSERT 呢?您需要首先弄清楚这一点,例如,您可以通过将每个查询包装在其自己的 try/catch 块中来做到这一点,然后打印它是哪个查询。另外,能否展示一下AJAX调用的相关代码? 【参考方案1】:

在您的插入查询字符串的末尾缺少一个右括号。 你需要关闭 VALUES( ... --> )

【讨论】:

已经像上面发布的那样弄清楚了,但非常感谢您的帮助:)

以上是关于PHP:SQLSTATE [42000]:语法错误或访问冲突:1064的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 — PHP — PDO [重复]

PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO

SQLSTATE [42000]:语法错误或访问冲突:sql select 语句中的 1064

使用PDO MySQL进行PHP搜索和分页 - SQLSTATE [42000]:语法错误

LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071