【问题标题】:SQL syntax error. check corresponds to MYSQL serverSQL 语法错误。 check对应MYSQL服务器
【发布时间】:2014-07-30 04:27:51
【问题描述】:

我尝试做一个可以将数据插入数据库的表单。在我插入一个虚拟数据后,它就出来了。

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以了解正确的语法

这个错误给我带来了麻烦。我的数据库没有插入任何记录

<?php

    $db = "assignment";
    $table = "column";

    $conn = mysqli_connect("localhost","root","");
    mysqli_select_db($conn,$db);

        $Title = $_POST['title'];
        $Author = $_POST['author'];
        $Country = $_POST['country'];
        $Date = $_POST['date'];
        $Abstract = $_POST['abstract'];
        $Problem = $_POST['rproblem'];
        $Aim = $_POST['raim'];
        $Objectives = $_POST['robjective'];
        $Type = $_POST['rstudies'];

    if(isset($_POST['rmethod'])){
        $method = implode(",",$_POST['rmethod']);
    }else{
        $method = "";
    }

    $sql = "INSERT INTO '$table' (title,author,country,date,abstract,rproblem,raim,robjective,rstudies,rmethod)
            VALUES ('$Title','$Author,'$Country','$Date','$Abstract','$Problem','$Aim','$Objectives','$Type','$method')";

    mysqli_query($conn,$sql);

    if (!mysqli_query($conn,$sql)){
        die('Error: ' . mysqli_error($conn));
    }else{
        echo "Data Added";
    }
    mysqli_close($conn);

    ?>

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    您已将$table 变量设置在单引号内,同时使用reserved wordcolumn 作为表名$table = "column";

    在它周围使用反引号,如下所示:

    INSERT INTO `$table`
    

    要么这样做,要么给你的桌子取另一个名字。


    '$Author, 此处还缺少引用,'$Author', 也是如此

    此外,您可以删除mysqli_query($conn,$sql);,因为您已经在使用
    if (!mysqli_query($conn,$sql))


    脚注:

    您当前的代码对SQL injection 开放。我强烈建议您使用prepared statements,或PDOprepared statements

    【讨论】:

    • 现在出现了新的错误。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'Malaysia','','','','','','Observational','')' 附近使用正确的语法
    • @WilliamLee 你这里也少了一个引用 '$Author, 所以'$Author',
    • @WilliamLee 您需要接受/支持有用的答案
    • 我遇到了类似的问题。就我而言,我有Load='test',一旦我将其更改为`Load`='test',它就起作用了。
    • @Morfinismo 我不得不承认,我一开始也曾冒险走这条路。从那时起,我找到了它的参考,以及"LOAD" is indeed a MySQL reserved word。很高兴知道这里的问答对您很有帮助,干杯!
    【解决方案2】:

    试试这个

    $sql = "INSERT INTO $table (title,author,country,date,abstract,rproblem,raim,robjective,rstudies,rmethod)
                VALUES ('$Title','$Author','$Country','$Date','$Abstract','$Problem','$Aim','$Objectives','$Type','$method')";
    

    表名或列名必须用反引号 (`) 括起来,而不是用单引号或双引号括起来。否则不要包装它们。只需像上面那样尝试。如果您使用保留关键字作为表名或列名,那么您必须将它们括在反引号中。最好不要使用任何保留关键字。所以如果你可以改变名称,那么它将是最佳选择。您在查询中使用了两个保留关键字。您的表名和日期列。都是关键字

    您可以check my answer here了解更多

    【讨论】:

    • 但还是有同样的问题。
    • 您能否发布您收到的错误消息并尝试回显您的查询并查看正在执行的查询
    • 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'Malaysia','','','','','','Observational','')' 附近使用正确的语法
    • 你缺少'$Author的右引号
    【解决方案3】:

    $author 上关注您也错过了' 的其他答案

    $sql = "INSERT INTO `$table` (title,author,country,date,abstract,rproblem,raim,robjective,rstudies,rmethod)
                VALUES ('$Title','$Author','$Country','$Date','$Abstract','$Problem','$Aim','$Objectives','$Type','$method')";
    

    还可以更好地替换

    mysqli_query($conn,$sql);
    if (!mysqli_query($conn,$sql)){
    

    $result = mysqli_query($conn,$sql);
    if (!$result){
    

    否则您的查询将执行两次。

    【讨论】:

    • @Fred-ii- 是的,谢谢老兄,我对此有点困惑
    • 不客气,Rakesh。我必须承认,这有点令人困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2014-10-16
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多