PHP |插入数组时SQL语法错误

时间:2010-05-11 18:21:59

标签: php arrays insert implode

我在将数组插入sql数据库时遇到了一些麻烦。

我的错误如下:

Unable to add : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '06:45:23,i want to leave a comment)' at line 1 

我的查询var_dump是:

string(136) "INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)"

我的问题是如何为id添加空值,因为它是主键而不是news_id

我的插入函数如下所示:

function insertQuery($tbl, &$data)
    {
        global $mysqli;
        $_SESSION['errors'] = array();
        require_once  '../config/mysqli.php';
        $query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (".implode(',',array_values($data)).")";
        var_dump($query);
        if($result = mysqli_query($mysqli, $query))
        {
        //$id = mysqli_insert_id($mysqli);
        print 'Very well done sir!';
        }
        else
        {
            array_push($_SESSION['errors'], 'Unable to add : ' . mysqli_error($mysqli));
        }
    }

注意:数组不是我的强项,所以我可能正确使用它们!

5 个答案:

答案 0 :(得分:4)

您需要使用单引号'yyyy-mm-dd hh:mm:ss'包装数据(您需要将它们应用于所有文本字段(日期,varchar,char,文本等)。另外,请确保正确转义任何单引号可能是文本的一部分。

答案 1 :(得分:2)

值(如果不是数字)必须放在引号之间。 浏览数组并将值放入引号,然后就像在代码片段中那样内爆它。

答案 2 :(得分:1)

你需要一个"字符串我想发表评论评论

试试这个

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";

答案 3 :(得分:1)

您在这里正确使用数组,即使是奇怪的方式。你的主要问题是你是怎么做的,你打破了查询:

INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)

应引用字符串值,如下所示:

INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,'Philip','2010-05-11 06:45:23','i want to leave a comment')

从技术上讲,如果你在数字周围加上引号,它也没有什么区别,因为MySQL应该根据需要将它们转换为数字。所以,你的代码应该更像这样:

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES ('".implode("','",array_values($data))."')";

请注意第二个'中的额外array_implode引号。这将使用单引号包装每个值,允许它在数据库中使用。

但请注意,如果任何值包含',那么它将会中断。你需要逃避这些,通常使用双,将其转换为''。如果您使用mysql_escape_string,它会为您处理所有这些,但必须对每个值进行处理。

答案 4 :(得分:0)

我认为你在字符串值周围缺少引号('),例如值应该是:

17263,'Philip','2010-05-11 06:45:23','i want to leave a comment'

注意:不要忘记使用mysql_real_escape_string函数作为字符串值。