0

我在将数组插入 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));
        }
    }

注意:数组不是我的强项,所以我可能会错误地使用它们!

4

5 回答 5

4

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

于 2010-05-11T18:24:08.237 回答
2

值(如果不是数字)必须放在引号之间。遍历数组并将值放入引号中,然后您可以像在代码片段中那样将其内爆。

于 2010-05-11T18:23:31.063 回答
1

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

试试这个

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";
于 2010-05-11T18:24:25.460 回答
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。这将用单引号包裹每个值,允许在数据库中使用它。

但是请注意,如果任何值包含 a ',那么它将中断。您需要转义这些,通常使用双精度,将其转换为''. 如果您使用mysql_escape_string,它将为您处理所有这些,但必须针对每个单独的值完成。

于 2010-05-11T18:27:59.523 回答
0

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

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

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

于 2010-05-11T18:24:55.173 回答