PHP | Ошибка синтаксиса SQL при вставке массива - PullRequest
0 голосов
/ 11 мая 2010

У меня возникли проблемы с вставкой массива в базу данных 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)"

У меня вопрос, как я могу добавить пустое значение к идентификатору, поскольку это первичный ключ, а не 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 ]

4 голосов
/ 11 мая 2010

Вам нужно заключить в свои данные одинарные кавычки 'yyyy-mm-dd hh:mm:ss' (Вы должны применить их ко всем текстовым полям (дата, varchar, символ, текст и т. Д.). Кроме того, убедитесь, что правильно экранированы любые одинарные кавычки, которые могут быть часть текста.

2 голосов
/ 11 мая 2010

значения (если они не числовые) должны быть заключены в кавычки. пройдитесь по массиву и поместите значения в кавычки, затем вы можете взорвать его, как это было в вашем фрагменте кода.

1 голос
/ 11 мая 2010

Вы правильно используете массивы здесь, даже если странным образом. Ваша главная проблема в том, что, как вы это делаете, вы нарушаете запрос:

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 , он позаботится обо всем этом за вас, но это должно быть сделано для каждого отдельного значения.

1 голос
/ 11 мая 2010

Вам нужно " вокруг строки Я хочу оставить комментарий комментарий

Попробуйте это

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";
0 голосов
/ 11 мая 2010

Я думаю, что вы пропускаете кавычки (') вокруг строковых значений, например, значения должны быть такими:

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

Примечание: Не забудьте использовать функцию mysql_real_escape_string для строковых значений.

...