Ошибка при вставке PHP SQL

У меня ошибка при вставке в базу данных.

Код:

dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')"); 

Игнорировать dbquery, работает точно так же, как mysql_query.

Ошибка, которую я получаю:

  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 ''title','short',' 

Не знаю, почему эта ошибка бросается!

Преподавание человека, как ловить рыбу.

Если запрос терпит неудачу, первое, что вам нужно сделать, это повторить запрос, который вы собираетесь отправить:

 $sql = "INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')"; echo $sql; 

Обычно довольно очевидно, что не так с окончательным запросом; обратите особое внимание на динамический материал в вашем запросе и, как правило, вокруг области, где MySQL жалуется.

Если это все еще выглядит хорошо, тогда вы ищете слова, которые могут потребоваться экранирование, например зарезервированные слова .

Вывод

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

Рекомендация

Вы должны узнать о PDO / mysqli и использовать подготовленные инструкции:

 // PDO example $stmt = $db->prepare('INSERT INTO site_news_comments (articleid, title, short, comment, timestamp, userid, main, type, topstory) VALUES (:article, :title, :short, :comment, CURRENT_TIMESTAMP, :user, :main, :type, :topstory)'); $stmt->execute(array( ':article' => $article, ':title' => $commentss['title'], ':short' => '', ':comment' => $_POST['comment'], ':user' => USER_ID, ':main' => 0, ':type' => $commentss['type'], ':topstory' => '', )); 

РЕДАКТИРОВАТЬ
Я читал слишком быстро в первый раз; Ошибка не отображается в списке столбцов, похоже, что она находится в списке значений. Единственное место, где запрос может иметь синтаксическую ошибку, заключается в том, что $article пуст (или не подвергнутый санитарной обработке данных, например нечисловой). Попробуйте добавить котировки вокруг него в запросе и / или проверить, что оно имеет по крайней мере значение по умолчанию:

 $article = (empty($article) || !is_numeric($article)) ? 0 : $article; dbquery("... VALUES ('".$article."', '".clean($commentss['title'])."', '', '".mysql_real_escape_string($_POST['comment'])."', current_timestamp, '".USER_ID."', '0', '".$commentss['type']."', '')"); 

Оригинальный ответ

Существует список reserved words используемых MySQL, которые, если вы используете их для имен столбцов, должны избегать их с обратными окнами.

Попробуйте обновить все исправления:

 dbquery("INSERT INTO site_news_comments (`articleid`, `title`, `short`, `comment`, `timestamp`, `userid`, `main`, `type`, `topstory`) VALUES ... 

Спасибо за помощь, ребята! Но я исправил проблему!

Похоже, что причиной проблемы был «URL». URL был

Новости / 1 / и страница = 2

Поэтому, когда я вставил статью $, она появилась как «1 /», потому что она считала, что идентификатор был 1 /, а не 1 из-за URL-адреса.

Поэтому я только что изменил его на

Новости / 1 и страница = 2

Благодаря!

 //change this line : dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')"); //to this : (surround $articleid with single quote) dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ('".$article."','".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");