Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не срабатывает sql запрос
 
 автор: Loki   (23.10.2005 в 14:53)   письмо автору
 
 

Делаю скрипт восстановления БД.
Его задача подцеплять gzip архив, и скармливать его данные функции mysql_query.
На текущий момент это выглядит так:

$gz=gzopen(arxiv10-13.sql.gz, "r"); 
$string=gzread($gz, 10485760); //читаем весь файл
$result=mysql_query($string);
echo 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 '; INSERT INTO 'arxiv' VALUES ('20','news','52'); INSERT INTO '

хотя, через phpmyadmin запрос проходит нормально.
Структура таблицы

CREATE TABLE 'arxiv' (
  'id' smallint(6) NOT NULL auto_increment,
  'table' tinytext NOT NULL,
  'lastfield' bigint(20) NOT NULL default '0',
  PRIMARY KEY  ('id')
) ENGINE=MyISAM;

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

   
 
 автор: codexomega   (23.10.2005 в 18:49)   письмо автору
 
   для: Loki   (23.10.2005 в 14:53)
 

Уберите кавычки в которых содержится название вашей таблицы.

   
 
 автор: Loki   (23.10.2005 в 20:05)   письмо автору
 
   для: codexomega   (23.10.2005 в 18:49)
 

Это глюк форума - там косые кавычки.

   
 
 автор: codexomega   (23.10.2005 в 20:11)   письмо автору
 
   для: Loki   (23.10.2005 в 20:05)
 

Это не важно, вообще уберите их.

   
 
 автор: Loki   (23.10.2005 в 20:17)   письмо автору
 
   для: codexomega   (23.10.2005 в 20:11)
 

Убирать их нельзя по условию задачи: таблицы могут иметь названия, совпадающие с системными коммандами sql. По отдельности все запросы работают, а вот скопом - не хотят.

   
 
 автор: cheops   (23.10.2005 в 20:50)   письмо автору
 
   для: Loki   (23.10.2005 в 14:53)
 

А что находится перед
; INSERT INTO 'arxiv' VALUES ('20','news','52'); INSERT INTO 
?

   
 
 автор: Loki   (23.10.2005 в 21:06)   письмо автору
 
   для: cheops   (23.10.2005 в 20:50)
 

Файл целиком в аттаче.

   
 
 автор: cheops   (23.10.2005 в 21:21)   письмо автору
 
   для: Loki   (23.10.2005 в 21:06)
 

А если взять содержимое дампа и засунуть в phpMyAdmin - тоже ошибка?

   
 
 автор: Евгений Петров   (23.10.2005 в 21:47)   письмо автору
 
   для: cheops   (23.10.2005 в 21:21)
 

Я че то примерно когда то пытался сделать. Прикол в том что нельзя в mysql_query() подставлять несколько запросов. А вот если построчно разбить на отдельные запросы, тогда все OK.

   
 
 автор: Loki   (23.10.2005 в 23:06)   письмо автору
 
   для: Евгений Петров   (23.10.2005 в 21:47)
 

Обидно... А построчно не получится: например, при экспорте форума присутствуют поля содержащие переводы строк.
Исхитрился сделать так: разбиваю в массив использую в качестве разделителя "');". После чего эту комбинацию подставляю в конец запроса. Вроде как в дампе не должно быть прямых кавычек... если только никто туда не засунет заэкранированные... Как поступить в этом случае - на знаю.
Или может в дампе сразу делать другие разделители...

   
 
 автор: cheops   (24.10.2005 в 13:29)   письмо автору
 
   для: Loki   (23.10.2005 в 23:06)
 

А проблема в разбивке? Хм... так вы разбивайте по регулярному выражению - их можно достаточно хитрыми сделать и учесть множество вариантов http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1407

   
 
 автор: Loki   (24.10.2005 в 13:54)   письмо автору
 
   для: cheops   (24.10.2005 в 13:29)
 

Посмотрел... любопытно. Но подобная последовательность может втретиться в текстовом поле (например, при экспорте этого форума). В общем, сделал я другой разделитель - теперь работает нормально... медленно, но надежно:)

   
 
 автор: cheops   (24.10.2005 в 21:03)   письмо автору
 
   для: Loki   (24.10.2005 в 13:54)
 

На самом деле не может, если все спец-символы внутри строк подвергаются экранированию. Напримр, тот же phpMyAdmin для каждого поста даёт строго одну строку.

   
 
 автор: Loki   (24.10.2005 в 22:54)   письмо автору
 
   для: cheops   (24.10.2005 в 21:03)
 

то есть по-хорошему, при архивации надо пропускать данные через addslashes, а при импорте через stripslashes? Как-то я об этом не подумал... надо будет сделать так. Спасибо!

   
 
 автор: Loki   (23.10.2005 в 23:01)   письмо автору
 
   для: cheops   (23.10.2005 в 21:21)
 

Я же написал, что phpmyadmin лопает это нормально:(

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования