Ошибка right syntax to use near at line 1

hello i have a run a query using php it give error

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 » at line 1

but when i echo the query and run manually using sqlyog software it runs fine. can anyone say whats the problem on here
this is my generated query

INSERT INTO wp_bp_activity
            (
            user_id,
             component,
             `type`,
             `action`,
             content,
             primary_link,
             item_id,
             secondary_item_id,
             date_recorded,
             hide_sitewide,
             mptt_left,
             mptt_right
             )
             VALUES(
             1,'activity','activity_update','<a title="admin" href="http://brandnewmusicreleases.com/social-network/members/admin/">admin</a> posted an update','<a title="242925_1" href="http://brandnewmusicreleases.com/social-network/wp-content/uploads/242925_1.jpg" class="buddyboss-pics-picture-link">242925_1</a>','http://brandnewmusicreleases.com/social-network/members/admin/',' ',' ','2012-06-22 12:39:07',0,0,0
             )

and here is my php code

$qr2="INSERT INTO wp_bp_activity
            (
            user_id,
             component,
             `type`,
             `action`,
             content,
             primary_link,
             item_id,
             secondary_item_id,
             date_recorded,
             hide_sitewide,
             mptt_left,
             mptt_right
             )
             VALUES(
             $cid,'activity',
             'activity_update',
             '<a href="http://brandnewmusicreleases.com/social-network/members/$name/" title="$name">$name</a> posted an update',
             '<a class="buddyboss-pics-picture-link" href="http://brandnewmusicreleases.com/social-network/wp-content/uploads/$imgname" title="$ionlyname">$ionlyname</a>',
             'http://brandnewmusicreleases.com/social-network/members/$name/',
             ' ',
             ' ',
             '$time',
             0,
             0,
             0
             )";

after edited

echo $qr2="INSERT INTO wp_bp_activity (user_id,component,`type`,`action`,content,primary_link,item_id,secondary_item_id,date_recorded,hide_sitewide,mptt_left,mptt_right) VALUES($cid,'activity','activity_update','<a href="http://brandnewmusicreleases.com/social-network/members/$name/" title="$name">$name</a> posted an update','<a class="buddyboss-pics-picture-link" href="http://brandnewmusicreleases.com/social-network/wp-content/uploads/$imgname" title="$ionlyname">$ionlyname</a>','http://brandnewmusicreleases.com/social-network/members/$name/','','','$time',0,0,0)";

mysql_query($qr2) or die(mysql_error());

Дата: 25.11.2013

Автор: Василий Лукьянчиков , vl (at) sqlinfo (dot) ru

Статья ориентирована на новичков. В ней объясняется, что означает ошибка сервера 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();

  • В MySQL допускается использование ключевых слов в качестве имен столбцов/таблиц, но при этом их необходимо заключать в обратные кавычки (там где буква ё на клавиатуре).
    Пример:

    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 |
    +——-+

  • По умолчанию ; разделяет команды. Если же нужно выполнить набор из нескольких инструкций как одну команду (например, при создании процедур, фунуций, триггеров), то в зависимости от используемого клиента может потребоваться переопределить разделитель с помощью DELIMITER, иначе интерпретация команды остановится на первой ; и будет ошибка синтаксиса. Пример:

    delimiter //
    create procedure test()
    begin
    set @a=1;
    select @a;
    end//

    Обратите внимание: DELIMITER это команда консольного клиента mysql, необходимость его использования зависит от того как вы передаете команду серверу. Например,:

    • 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

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

  • Часто проблемы вызваны тем, что дамп делается неродными средствами MySQL (например, phpmyadmin) из-за чего в нем могут быть BOM-маркер, собственный синтаксис комментариев, завершения команды и т.д. Кроме того при использовании того же phpmyadmin возможна ситуация при которой из-за ограничения апача на размер передаваемого файла команда будет обрезана, что приведет к ошибке 1064.
    Например, если вы получаете ошибку:

    #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

    Значит ваш дамп содержит BOM-маркер. Это три байта в начале файла, помогающие программе определить что данный файл сохранен в кодировке UTF-8. Проблема в том, что MySQL пытается интерпретировать их как команду из-за чего возникает ошибка синтаксиса. Нужно открыть дамп в текстовом редакторе (например, Notepad++) и сохранить без BOM.

    Для избежания подобных проблем при создании дампа и его импорте лучше пользоваться родными средствами MySQL, см http://sqlinfo.ru/forum/viewtopic.php?id=583

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 != «

Обратите внимание: из процитированного сервером MySQL куска запроса причина ошибки не ясна. Если ваша CMS не показывает весь запрос целиком, то нужно в скриптах найти место где выполняется данный запрос и вывести его на экран командой echo.

Кусок кода, который отвечает за данный запрос это

$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

Дата публикации: 25.11.2013

© Все права на данную статью принадлежат порталу SQLInfo.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в бумажных изданиях допускается только с разрешения редакции.

во первых запрос должен иметь примерно такой формат:

INSERT INTO `price` (`N`, `title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES  (1,'Poi',2,1000,1500,2000,4000)

обрати внимание, что кол-во полей не то, кол-во данных которые вставляются не соответствует кол-ву полей
во вторых у вас тип данных не правильный

`localsum` char(100) not null,
`regionsum` char(100) not null,
`rfsum` char(100) not null,
`intersum` char(100) not null,

эти поля должны быть int а не char
Если вы хотите именно строку, то цифры (при вставке) нужно оборачивать в кавычки

в третьих, раз `N` int not null auto_increment, то значение N можно или игнорировать при вставке, или передавать NULL

P.S. Строку вставки можно делать так:

INSERT INTO `price` SET `field`=1, `field2`=2, `field3`=3

так визуально понятней что куда вставляется

——
UPD

<?php
// соединение с базой:
chdir(dirname(__FILE__));
$dsn = 'mysql:host=localhost'.
    ';dbname=temp_development'.
    ';port='.
    ';connect_timeout=15';

$user = 'root';
$password = '123qwe#';
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



$file = "./price.txt";# 'Poi',2,1000,1500,2000
# в файле я убрал последнее значение, т.к. для него нет соответствующей колонки в ДБ
if($fp = fopen($file, 'r'))
{
    $sql = "INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ";
    $prepare = array();
    $insert = array();
    while($line = fgets($fp))
    {
        $line = trim($line);
        if(!$line)
            continue;
        # Читаю файл построчно, чтоб память не загадилась если файл содержит оч много данных

        // валидацию данных я не делаю
        array_push($prepare, implode(",", array_fill(0, 5, "?")));
        $insert = array_merge($insert, explode(",", $line));

    }
    $pr = $db->prepare($sql."( ".implode("), (", $prepare)." )");
    $pr->execute($insert);
}

этот код сгенерирует такой вот запрос в бд:

INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ( ''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000'), (''Poi'','2','1000','1500','2000' )

So, you’re creating a custom SQL query to perform a task in the database. After putting the code together and running it in PHPmyAdmin it responds with a 1064 error. It may look similar to this:

1064 error message

The 1064 error displays any time you have an issue with your SQL syntax, and is often due to using reserved words, missing data in the database, or mistyped/obsolete commands. So follow along and learn more about what the 1064 error is, some likely causes, and general troubleshooting steps.

Note: Since syntax errors can be hard to locate in long queries, the following online tools can often save time by checking your code and locating issues:

  • PiliApp MySQL Syntax Check
  • EverSQL SQL Query Syntax Check & Validator

Causes for the 1064 error

  • Reserved Words
  • Missing Data
  • Mistyped Commands
  • Obsolete Commands

This may seem cryptic since it is a general error pointing to a syntax issue in the SQL Query statement. Since the 1064 error can have multiple causes, we will go over the most common things that will result in this error and show you how to fix them. Follow along so you can get your SQL queries updated and running successfully.

Using Reserved Words

Every version of MySQL has its own list of reserved words. These are words that are used for specific purposes or to perform specific functions within the MySQL engine. If you attempt to use one of these reserved words, you will receive the 1064 error. For example, below is a short SQL query that uses a reserved word as a table name.

CREATE TABLE alter (first_day DATE, last_day DATE);

How to fix it:

Just because the word alter is reserved does not mean it cannot be used, it just has special requirements to use it as the MySQL engine is trying to call the functionality for the alter command. To fix the issue, you will want to surround the word with backticks, this is usually the button just to the left of the “1” button on the keyboard. The code block below shows how the code will need to look in order to run properly.

CREATE TABLE `alter` (first_day DATE, last_day DATE);

Missing Data

Sometimes data can be missing from the database. This causes issues when the data is required for a query to complete. For example, if a database is built requiring an ID number for every student, it is reasonable to assume a query will be built to pull a student record by that ID number. Such a query would look like this:

SELECT * from students WHERE studentID = $id

If the $id is never properly filled in the code, the query would look like this to the server:

SELECT * from students WHERE studentID =

Since there is nothing there, the MySQL engine gets confused and complains via a 1064 error.

How to fix it:

Hopefully, your application will have some sort of interface that will allow you to bring up the particular record and add the missing data. This is tricky because if the missing data is the unique identifier, it will likely need that information to bring it up, thus resulting in the same error. You can also go into the database (typically within phpMyAdmin) where you can select the particular row from the appropriate table and manually add the data.

Mistyping of Commands

One of the most common causes for the 1064 error is when a SQL statement uses a mistyped command. This is very easy to do and is easily missed when troubleshooting at first. Our example shows an UPDATE command that is accidentally misspelled.

UDPATE table1 SET id = 0;

How to fix it:

Be sure to check your commands prior to running them and ensure they are all spelled correctly.

Below is the syntax for the correct query statement.

UPDATE table1 SET id = 0;

Obsolete Commands

Some commands that were deprecated (slated for removal but still allowed for a period of time) eventually go obsolete. This means that the command is no longer valid in the SQL statement. One of the more common commands is the ‘TYPE‘ command. This has been deprecated since MySQL 4.1 but was finally removed as of version 5.1, where it now gives a syntax error. The ‘TYPE‘ command has been replaced with the ‘ENGINE‘ command. Below is an example of the old version:

CREATE TABLE t (i INT) TYPE = INNODB;

This should be replaced with the new command as below:

CREATE TABLE t (i INT) ENGINE = INNODB;

For developers or sysadmins experienced with the command line, get high availability and root access for your application, service, and websites with Cloud VPS Hosting.

Error 1064 Summary

As you can see there is more than one cause for the 1064 error within MySQL code. Now, you know how to correct the issues with your SQL Syntax, so your query can run successfully. This list will be updated as more specific instances are reported.

  • #1

Здравствуйте, помогите, пожалуйста, разобраться, уже несколько дней бьюсь и немогу ничего добиться

есть запрос формируемый в цикле:

Код:

...
$sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES ".$data[$i].";";
echo($sql);
mysql_query($sql) or die(mysql_error ());
...

Пробовал имена полей писать через простую (одинарную) кавычку, обратную, без кавычек — результат одинаковый:
INSERT INTO `aisrzppp`.`persons` (`ipn`, `surname`, `name`, `patrname`) VALUES (‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’);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 »1234567890′, ‘Иванов’, ‘Иван’,’ at line 1
заметил что в конце сообщения о ошибке после запятой нету пробела, хотя если вывести массив пробел там есть.

подскажите что делать

  • #2

а зачем вам «;» в тесксте запроса? это так, оффтопик )

попробуйте скопировать свой готовый запрос и выполнить где-то в консоли (phpmyadmin и т.п.) единственно, что в консоли «;» после текста запроса это нормально, а для mysql_query() он не нужен.

Последнее редактирование: 23 Июн 2014

  • #3

«;» — это была попытка найти причину, щас поправлю
пробовал в phpmyadmin, после этого добавил обратные кавычки вокруг имен полей — не помогло

более того, если в запрос в коде записать руками «(‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’)» все работает,
$data заполняется функцией которая читает из *.dbf и перекодирует

Код:

$value = iconv("CP866", "UTF-8", $value);
          $value = addslashes(trim($value));
          $value = "'".$value."'";
          $row[$key] = htmlspecialchars($value, ENT_QUOTES, "UTF-8");

потом имплоде сбивает все в одну строку в скобках и присваивается элементу массива, дальше массив в цикле формирует по запросу на каждый элемент массива.
Только, что пробовал вводил в *.dbf вручную данные (думал может некоректно что-то — пробелы табы…хотя есть же трим) и результат: INSERT INTO `aisrzppp`.`persons` (`ipn`, `surname`, `name`, `patrname`) VALUES (‘12345678’, ‘Иванов’, ‘Иван’, ‘Иванович’);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 »12345678′, ‘Иванов’, ‘Иван’, ‘И’ at line 1
такое ощучение что обрезает запрос по длине в 35 символов после скобки

Последнее редактирование: 23 Июн 2014

  • #4

пробовал в phpmyadmin, после этого добавил обратные кавычки вокруг имен полей — не помогло

Не понял. Вы копируете тот запрос, который через echo($sql), вставляете в phpmyadmin — он выполняется без ошибок или как? Давайте без лишних подробностей, только по существу.

  • #5

если вместо

Код:

$sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES ".$data[$i];

пишу

Код:

$sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES "."('1234567890', 'Иванов', 'Иван', 'Иванович')";

то работает!

  • #6

еще раз, вы выводите для диагностики уже готовый текст запроса. ОН выполняется в pma?

$sql=»INSERT Iblablablabla».$data[hujnane];
echo($sql); // <— вы можете буквально скопировать то, что выведется?

  • #7

Товарисч!

Задумайся вопросом — А чем отличается — ….VALUES «.$data[$i] от VALUES «.»(‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’)?

  • #8

Код:

$count = count($data)+1;    //число проходов цикла.
    //var_dump($data);   
    for ($i=0; $i < $count; $i++) {
                   
    $sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES ".$data[$i].";";
    echo($sql);
    mysql_query($sql) or die(mysql_error ());
    echo ('Добавлено - '.$i);
    }

выводит:
INSERT INTO `aisrzppp`.`persons` (`ipn`, `surname`, `name`, `patrname`) VALUES (‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’);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 »1234567890′, ‘Иванов’, ‘Иван’, ‘И’ at line 1
А вот

Код:

$sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES "."('1234567890', 'Иванов', 'Иван', 'Иванович')";
mysql_query($sql) or die(mysql_error ());
echo ('Поздравляем!!!');

Выводит: Поздравляем!!! и в базе появляется необходимая запись

ПС: всё что в скобках после VALUES «. просто скопировано из браузера и вставлено в код.

  • #9

Товарисч!

Задумайся вопросом — А чем отличается — ….VALUES «.$data[$i] от VALUES «.»(‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’)?

echo($sql); выводит полный текст аж до последеней (закрывающей) скобки (INSERT INTO `aisrzppp`.`persons` (`ipn`, `surname`, `name`, `patrname`) VALUES (‘1234567890’, ‘Иванов’, ‘Иван’, ‘Иванович’))
а вот следующая строка: mysql_query($sql) or die(mysql_error ()); выводит — 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 »1234567890′, ‘Иванов’, ‘Иван’, ‘И’ at line 1
Почему???

  • #10

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

  • #11

Это я понимаю, я не могу понять где моя ошибка.
Пробовал другие ФИО посчитал что все обрезаются после 34-го символа (считал с 1) включая пробелы, запятые и кавычки, но не считал скобку.
Меня удивляет то, что если, вывести запрос (командой echo) он есть весь, если ЭТОТ ЖЕ запрос вставить в код в виде строки он прекрасно обрабатывается и код выполняется, почему же тогда он не хочет выполняться когда часть запроса берется из переменной?

  • #12

Чудеса в программировании – большая редкость.
Что выводит var_dump($data); ?

  • #13

точку с запятой в конце запроса уберите.

  • #14

$count = count($data)+1; //число проходов цикла.
//var_dump($data);
for ($i=0; $i < $count; $i++) {

Этот цикл должен перебрать на одну запись больше, чем их есть.

Так какой текст запроса выводится перед ошибкой?

Последнее редактирование: 23 Июн 2014

  • #15

$count — поправил, и точку с запяой убрал.

запрос, по идее, правильный, если я копирую строку которую выводит echo($sql); и вставляю непосредственно в код, или часть строки вместо $data[$i]) то всё работает

  • #16

Попробуй так

Код:

.......
$the_values = $data[$i];
$sql="INSERT INTO `".$database."`.`".$table_name."` (`ipn`, `surname`, `name`, `patrname`) VALUES $the_values";
......

  • #17

попробовал, та же ерунда :mad:
но кажется понял в чём проблема, если глянуть html который выводится там:
INSERT INTO `aisrzppp`.`persons` (`ipn`, `surname`, `name`, `patrname`) VALUES ('1234567890', 'Иванов', 'Иван', 'Иванович&#039;)</br>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 ‘'1234567890', 'Иванов', 'Иван', 'И’ at line 1

мне не нравятся вот эти

Фанат


  • #18

Топик — ад.
Вот реально — зашел на форум, и как будто из современного мегаполиса к папуасам попал, которые голышом бегают и на пипиську тыкву надевают для красоты. Мало того что mysql_query из прошлого века. Мало того, что запрос собирается руками. Но вот это этот ужас откуда взялся?

Код:

          $value = addslashes(trim($value));
          $value = "'".$value."'";
          $row[$key] = htmlspecialchars($value, ENT_QUOTES, "UTF-8");

На крыльях ночи, не иначе, прилетел.

Ведь где-то он это вычитал. У каких-то папуасов.
Самым лучшим подарком языку РНР будет, если из сети разом исчезнут ВСЕ посвященные ему сайты. Включая мой.

Впрочем, крупные специалисты в контактике все равно так и будут друг другу такие вот советы давать

Последнее редактирование: 24 Июн 2014

c0dex


  • #19

Просмотреть исходник страницы человек видимо не решился =) А подгадил ему именно htmlspecialchars, как мне думается, примененный сюда, как сказал Фанат, ни к лугу, ни к болоту.

Фанат


  • #20

Просмотреть исходник страницы человек видимо не решился =) А подгадил ему именно htmlspecialchars, как мне думается, примененный сюда, как сказал Фанат, ни к лугу, ни к болоту.

Не надо передергивать. Я конкретно перечислил, что ему подгадило:
— ископаемая mysql_query
— ручная сборка запроса
— варварское форматирование.
— дебильный источник информации про РНР

На фоне всего этого htmlspecialchars — это так, мелкий эпизод

Последнее редактирование: 24 Июн 2014

Понравилась статья? Поделить с друзьями:
  • Ошибка rfc ивеко стралис что это такое
  • Ошибка rfc ивеко стралис что означает
  • Ошибка return to castle wolfenstein cannot write hunkusage dat
  • Ошибка restriction service communication failure
  • Ошибка restricted performance jaguar xf