Forum SQL syntax Error
Hello I am trying to build a forum, but when I click over the topic of my forum I can view the page. I get the following error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near »7» at line 1 Here is my code from the view_topic.php page that I am trying to build:
Timkipptutorials
Username: Password " ; > else< echo "You are logged in as ".$_SESSION['username']." • Logout"; > ?>
"; if(isset($_SESSION['uid']))< echo "
"; >else< echo "Please log in to add a reply
"; > while ($row = mysql_fetch_assoc($res)) < $sql2 = "SELECT * FROM posts WHERE category_id = '".$cid."' AND topic_id '".$tid."'"; $res2 = mysql_query($sql2) or die(mysql_error()); while($row2 = mysql_fetch_assoc($res2))< echo "".$row['topic_title']."
by ".$row2['post_creator']. " - ".$row2['post_date']."
".$row2['post_content']." User Info Here "; > $old_views = $row['topic_views']; $new_views = $old_views + 1; $sql3 = "UPDATE topics SET topic_views='".$new_views."' WHERE category_id='".$cid."' AND LIMIT 1"; $res3 = mysql_query($sql3) or die(mysql_error()); > echo ""; >else< echo "This topic does not exist.
"; > ?> Your code is vulnerable to SQL injection attacks. You should use mysqli or PDO prepared statements with bound parameters as described in this post.
Don’t use the mysql_* functions. They have been deprecated since v5.5 (Jun 2013) and removed since v7.0 (Dec 2015). Instead use the mysqli_* or PDO functions with prepared statements and bound parameters.
@Vlad Thank you. I really appreciate your help. I went through the code several times and did not find the mistake. Thank you so much.
MySQL error 1064
Статья ориентирована на новичков. В ней объясняется, что означает ошибка сервера MySQL №1064, рассматриваются типичные ситуации и причины возникновения этой ошибки, а также даются рекомендации по исправлению.
Рассмотрим простейший пример.
SELECT mid , time , title, artist, download, view_count, rating, vote_num FROM dle_mservice WHERE category = ‘1’ AND approve = ‘1’ ORDER BY time DESC LIMIT -10 , 10 ;
ERROR 1064 ( 42000 ) : 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 ‘-10,10’ at line 1
Сервер MySQL сообщает, что в первой строке нашего SQL запроса имеется синтаксическая ошибка, и в одинарных кавычках цитирует часть запроса с того места где начинается ошибка. Это очень полезное свойство, так как позволяет сразу определить место, которое сервер счел ошибочным. В данном случае это ‘-10,10’, ошибка возникает из-за того, что параметр LIMIT не может быть отрицательным числом.
Однако, бывает и так, что цитируемый кусок запроса не содержит синтаксической ошибки. Это означает, что данная часть запроса находится не на своем месте из-за чего весь запрос становится синтаксически неверным. Например, отсутствует разделитель между двумя запросами, пропущен кусок запроса, невидимый символ в дампе и т.д. Неудобством таких ситуаций является то, что сообщение об ошибке не содержит исходный запрос. Действия по исправлению зависят от контекста возникновения ошибки. Таковых всего 3:
1. Запрос в редакторе.
Самый простейший случай — вы пишите свой запрос в редакторе. Если причина не опечатка, то:
Смотреть в документации синтаксис команды для вашей версии сервера MySQL.
Обратите внимание: речь идет о версии сервера MySQL, а не клиента (phpmyadmin, workbench и т.д.). Версию сервера можно узнать выполнив команду select version ( ) ;
select order from test;
ERROR 1064 ( 42000 ) : 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 ‘order from test’ at line 1
MariaDB [ test ] > select ` order ` from test;
+ ——-+
| order |
+ ——-+
| NULL |
+ ——-+
- mysql_query() выполняет содержимое как одну команду, добавление delimiter приведет к error 1064 с цитатой, начинающейся со слова delimiter
- phpmyadmin удаляет слово delimiter из-за чего возникает error 1064 с цитатой, начинающейся с переопределенного разделителя
- в MysqlQueryBrowser напротив необходимо использовать delimiter.
2. Перенос базы на другой сервер.
У вас есть дамп (т.е. файл с расширением .sql) и при попытке его импортировать вы получаете ошибку 1064. Причины:
В различных версиях набор ключевых слов и синтаксис может немного отличаться. Наиболее распространенный случай: команда create table, в которой ключевое слово type было заменено на engine. Например, если вы получаете ошибку:
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 ‘TYPE=MyISAM CHARACTER SET `utf8`’ at line 29
Это означает, что вы переносите базу в пятую версию сервера MySQL, в котором ключевое слово TYPE не поддерживается и его нужно заменить на ENGINE. Редко бываю случаи, когда перенос идет на старый (~3.23) сервер, который кодировки не поддерживает. Тогда ошибка будет иметь вид:
#1064 — You have an error in your SQL syntax near ‘DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci’ at line 1
#1064 — 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 ‘
CREATE TABLE `jos_banner` (
`bid` int ( 11 ) NOT NULL auto_increment ,
`ci ‘ at line 1
3. Некорректная работа сайта.
Если во время работы сайта появляются ошибки синтаксиса, то, как правило, причина в установке вами сомнительных модулей к вашей cms. Лучшее решение — отказаться от их использования. Еще лучше предварительно проверять их работу на резервной копии.
Пример. Движок dle 7.2, поставили модуль ,вроде бы все Ок, но:
MySQL Error!
————————
The Error returned was:
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 ‘AND approve=’ 1 ‘ AND date < ' 2008 -10 -04 04 : 34 : 25 ' LIMIT 5' at line 1
Error Number:
1064
SELECT id, title, date , category, alt_name, flag FROM dle_post WHERE MATCH ( title, short_story, full_story, xfields, title ) AGAINST ( ‘Приобретение и оплата скрипта ‘ ) AND id != AND approve= ‘1’ AND date < '2008-10-04 04:34:25' LIMIT 5
В данном примере мы видим, что причина ошибки в отсутствии значения после «id ! php» style=»font-family: monospace;»> $db -> query ( «SELECT id, title, date, category, alt_name, flag FROM » . PREFIX . «_post WHERE MATCH (title, short_story, full_story, xfields, title) AGAINST (‘$body’) AND id != » . $row [ ‘id’ ] . » AND approve=’1′» . $where_date . » LIMIT » . $config [ ‘related_number’ ] ) ;
Далее можно искать откуда взялась переменная $row и почему в ней нет элемента ‘id’ и вносить исправления, но лучше отказаться от использования такого модуля (неизвестно сколько сюрпризов он еще принесет).
P.S. Если после прочтения статьи ваш вопрос с MySQL Error 1064 остался нерешенным, то задавайте его на форуме SQLinfo
© Все права на данную статью принадлежат порталу SQLInfo.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в бумажных изданиях допускается только с разрешения редакции.
Ошибка синтаксиса при импорте таблицы mysql с html-кодом в ней
Как вы создали этот файл? Некоторые инструменты не следует использовать для экспорта БД.
Покажите нам инструкцию SQL.
Как вы пытаетесь импортировать данные? командная строка mysql, рабочая среда mysql, phpmyadmin, php, . Без подробностей решить проблему сложно.
Чтобы ответить на ваш вопрос, нам понадобится немного больше. Если вы отправите MVCE, я ожидаю, что вы получите ответ менее чем через 30 минут.
Расскажите, пожалуйста, как вы импортируете данные? Как, я могу импортировать таблицу mysql, содержащую текст html, с помощью phpmyadmin
Какая бы программа ни генерировала SQL, она делала это неправильно. Снова экспортируйте его с помощью подходящего инструмента
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP.
Laravel — это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в.
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления.
Ответы 1
Вы очень мало показали нам ошибку, я вижу, что она жалуется на помутнение одинарной кавычки ‘
Если вы заметили в начале цитируемого текста из MySQL, у него есть » , а в конце — только ‘ . Ошибки MySQL показывают код проблемы в начальном месте в одинарных кавычках, поэтому мы удаляем одну одинарную кавычку, заключающую в себе синтаксис с ошибками, который мы получаем
\r\n - Unpack the equipment and materials\r\n
- Secure the mounting
. вам нужно убедиться, что ваш HTML безопасен для MySQL, прежде чем вводить его в базу данных, поэтому замените одинарные кавычки на \’ или, если он должен отображаться, вы должны использовать '
если вы используете php, вы можете использовать addslashes , чтобы избежать одинарных кавычек ‘ с \’ перед входом.
Другой вариант — прекратить использование напрямую построенных запросов и использовать в коннекторе prepare & bind_param, так как это предотвратит это.
К сожалению, однако, если вы используете mysqlimport cli, и это предварительно созданный файл .sql, вам придется просмотреть его вручную и исправить, я настоятельно рекомендую редактор с поддержкой синтаксиса, чтобы сделать это Рабочая среда MySQL, это лучший для синтаксиса MySQL
Ошибка синтаксиса mysql как исправить?
1 2
3 include __DIR__.»/config.php»;
4
5 class DbConnect <
6 private $connect;
7 public function __construct() 8 $this->connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
9
10 $query = «SET NAMES ‘utf8mb4′»;
11 $query .= «SET GLOBAL max_allowed_packet=16777216»;
11 mysqli_query($this->connect,$query);
13
14 if (mysqli_connect_errno($this->connect))
15 16 echo «Failed to connect to MySQL: » . mysqli_connect_error();
17 >
18 >
19
20 public function getDb() <
21 return $this->connect;
22 >
23 >
Выдает при обращении в логах:
Uncaught mysqli_sql_exception: 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 ‘SET GLOBAL max_allowed_packet=16777216’ at line 1 in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php:12\nStack trace:\n#0 /home/ascer175/domains/androidyava.today/public_html/sql/DB.php(12): mysqli_query()\n#1 /home/ascer175/domains/androidyava.today/public_html/sql/DBOperations.php(159): DbConnect->__construct()\n#2 /home/ascer175/domains/androidyava.today/public_html/rest_api/register.php(20): DBOperations->isEmailExist()\n#3 \n thrown in /home/ascer175/domains/androidyava.today/public_html/sql/DB.php on lin
Пересмотрел много разного, ни чего не нашел. php & mysql не знаю почти. Может кто подсказать?
mysqli_query() выполняет только один запрос.
если надо выполнить два, то надо вызвать эту функцию два раза
кодировка соединения должно выставляться не SQL запроса, с с помощью специальной функции.
SET GLOBAL на хостинге работать не будет