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

Форум MySQL

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

 

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

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

тема: Ошибка при выполнении запроса создающего большую таблицу
 
 автор: pautina   (26.02.2012 в 13:47)   письмо автору
 
 

Здравствуйте мне нужно по запросу создать таблицу
Таблица большая состоит из 244 строк каждая строка содержит объёмный html код
Запрос формирующий таблицу такой (код не весь)

CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) TYPE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO material_content_into244 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES  
('1','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\">
...

Сначала при выполнении запроса нехватало ресурсов
я изменил эти параметры в php.ini

max_execution_time =  3600
max_input_time = 600
memory_limit = 512M

После запускал запрос по созданию большой таблицы (вес файла sql 7мб)
Но запрос не выполнился вышло такое сообщение

There seems to be an error in your SQL query. The MySQL server error output below, if there is any, may also help you in diagnosing the problem
ERROR: Unknown Punctuation String @ 831738
STR: ><
SQL: CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) TYPE=MyISAM DEFAULT CHARSET=utf8;# MySQL returned an empty result set (i.e. zero rows).


INSERT IGNORE INTO material_content_into244 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES  
('1','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A> 
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
...
)
SQL query:  

 SELECT `comment` FROM `phpmyadmin`.`pma_column_info` WHERE db_name = 'bd_photoshop-portal' AND table_name = '' AND column_name = '(db_comment)' 

MySQL said:  
 #2006 - MySQL server has gone away

Делал аналогичный запрос на 3 строки все выполнялось нормально, но вот для 244 строк запрос таблицу не создаёт (причём синтаксис запроса который создаёт большую таблицу скорее всего правильный)
Что можно сделать с этой ошибкой, и в какой она строке?

  Ответить  
 
 автор: cheops   (26.02.2012 в 13:55)   письмо автору
 
   для: pautina   (26.02.2012 в 13:47)
 

Каким скриптом/утилитой разворачивается таблица? Попробуйте TYPE в параметрах таблицы заменить на ENGINE.

  Ответить  
 
 автор: pautina   (26.02.2012 в 14:09)   письмо автору
 
   для: cheops   (26.02.2012 в 13:55)
 

Таблица разворачивается за счёт кода в блокнотовском файле
Пробовал ваш вариант

There seems to be an error in your SQL query. The MySQL server error output below, if there is any, may also help you in diagnosing the problem
ERROR: Unknown Punctuation String @ 831740
STR: ><
SQL: CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;# MySQL returned an empty result set (i.e. zero rows).

Опять выходит это же сообщение о ошибке

  Ответить  
 
 автор: cheops   (26.02.2012 в 14:17)   письмо автору
 
   для: pautina   (26.02.2012 в 14:09)
 

>Таблица разворачивается за счёт кода в блокнотовском файле
Нет имеется в виду, кто выполняет запросы из SQL-дампа и отправляет их серверу базы данных?

  Ответить  
 
 автор: pautina   (26.02.2012 в 14:26)   письмо автору
 
   для: cheops   (26.02.2012 в 14:17)
 

кто выполняет запросы из SQL-дампа и отправляет их серверу базы данных?
Даже не знаю что сказать?
Вообще я всегда просто делал вставлял блокнотовский код в запрос он выполнялся и создавалась таблица, сейчас просто не пошло
Эта информация может помочь
MySQL
Server: localhost via TCP/IP
Server version: 5.1.40-community
Protocol version: 10
User: root@localhost
MySQL charset: UTF-8 Unicode (utf8)
Web server
Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3
MySQL client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
PHP extension: mysql
phpMyAdmin
Version information: 3.2.3

  Ответить  
 
 автор: cheops   (26.02.2012 в 14:56)   письмо автору
 
   для: pautina   (26.02.2012 в 14:26)
 

>Вообще я всегда просто делал вставлял блокнотовский код в запрос
А запрос чем выполняете? phpMyAdmin?

  Ответить  
 
 автор: pautina   (26.02.2012 в 14:57)   письмо автору
 
   для: cheops   (26.02.2012 в 14:56)
 

Ну да запрос в phpMyAdmin выполняю

  Ответить  
 
 автор: cheops   (26.02.2012 в 15:19)   письмо автору
 
   для: pautina   (26.02.2012 в 14:57)
 

Что у вас идет до строки?
CREATE TABLE IF NOT EXISTS material_content_into244

  Ответить  
 
 автор: pautina   (26.02.2012 в 15:22)   письмо автору
 
   для: cheops   (26.02.2012 в 15:19)
 

Ничего не идёт это 1-ая строка.
Сам код формирующий таблицу такой

CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO material_content_into244 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES  
('1','Уроки Photoshop','Рубрика: Эффекты','...
и так до 244 id 
')

Для 3 строк запрос таблицу формировал а для 244 таблица не создаётся почему не ясно.

  Ответить  
 
 автор: cheops   (26.02.2012 в 15:36)   письмо автору
 
   для: pautina   (26.02.2012 в 15:22)
 

Это вы уже писали, а до этой таблице в дампе что расположено? Нет ли в предыдущем запросе ошибки?

  Ответить  
 
 автор: pautina   (26.02.2012 в 15:41)   письмо автору
 
   для: cheops   (26.02.2012 в 15:36)
 

Если запрос выполняется с ошибкой, после этого я всегда удаляю что было создано (таблица material_content_into244)

  Ответить  
 
 автор: cheops   (26.02.2012 в 15:48)   письмо автору
 
   для: pautina   (26.02.2012 в 15:41)
 

Да, я тоже так поступаю, если дамп не очень большой... возвращаясь к решению проблемы, вы можете показать строки, которые идут перед строкой?
CREATE TABLE IF NOT EXISTS material_content_into244 (

  Ответить  
 
 автор: pautina   (26.02.2012 в 15:54)   письмо автору
 
   для: cheops   (26.02.2012 в 15:48)
 

Давайте покажу как это сделать?

  Ответить  
 
 автор: cheops   (26.02.2012 в 15:58)   письмо автору
 
   для: pautina   (26.02.2012 в 15:54)
 

Делать что?

  Ответить  
 
 автор: pautina   (26.02.2012 в 16:00)   письмо автору
 
   для: cheops   (26.02.2012 в 15:58)
 

вы можете показать строки, которые идут перед строкой?
CREATE TABLE IF NOT EXISTS material_content_into244 (

Это первая строка с неё начинается формирование запроса.

а до этой таблице в дампе что расположено? Нет ли в предыдущем запросе ошибки?
может мне дамп нужно очистить
как это можно сделать

я могу делать запросы для создания таблицы из 5, 10 строк (копируя их из кода исходного запроса в 244 записи) и таким образом сужать область поиска на запись в которой содержится недопустимый символ, но это тоже не очень хороший вариант, (копировать нужно слишком много одним мышом не вытянешь)
можно ли определить в какой строке содержится недопустимый символ?

  Ответить  
 
 автор: cheops   (26.02.2012 в 17:23)   письмо автору
 
   для: pautina   (26.02.2012 в 16:00)
 

Т.е. это строка первая в дампе, а phpMyAdmin не указывает конкретной строки? А много у вас таблиц в дампе? Попробуйте разбить его на части и выполнять дамп по частям, хоть одна часть выполняется?

  Ответить  
 
 автор: pautina   (26.02.2012 в 18:09)   письмо автору
 
   для: cheops   (26.02.2012 в 17:23)
 

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

  Ответить  
 
 автор: cheops   (26.02.2012 в 21:43)   письмо автору
 
   для: pautina   (26.02.2012 в 18:09)
 

А вы как дамп разворачиваете? Через Импорт? У вас в таблицах написано, что они UTF8, в то время как сам дамп в кодировке Windows-1251. Напишите в начале дампа строку
SET NAMES cp1251;
и попробуйте развернуть его снова.

  Ответить  
 
 автор: pautina   (27.02.2012 в 06:09)   письмо автору
 
   для: cheops   (26.02.2012 в 21:43)
 

Использовал такую запись

SET NAMES cp1251;
CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;
...

Всё равно вышла ошибка
ERROR: Unknown Punctuation String @ 831813
STR: ><
SQL: SET NAMES cp1251;# MySQL returned an empty result set (i.e. zero rows).

CREATE TABLE IF NOT EXISTS material_content_into244 (
`ID` VARCHAR(255),
`Field 1` VARCHAR(255),
`Field 2` VARCHAR(255),
`Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;# MySQL returned an empty result set (i.e. zero rows).


Если использовать такой запрос

SET NAMES cp1251;
CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


Таблица тоже не создаётся и выходит ошибка
ERROR: Unknown Punctuation String @ 831815
STR: ><
SQL: SET NAMES cp1251;# MySQL returned an empty result set (i.e. zero rows).


Что ещё можно попробовать?
Как определить в какой строке ошибка или в какой записи '1', '2' ...'244'?

  Ответить  
 
 автор: cheops   (27.02.2012 в 11:53)   письмо автору
 
   для: pautina   (27.02.2012 в 06:09)
 

Вы как дамп разворачиваете? Через Импорт?

  Ответить  
 
 автор: pautina   (27.02.2012 в 12:35)   письмо автору
 
   для: cheops   (27.02.2012 в 11:53)
 

Я просто запрос текстовый ввожу на закладке sql в phpmyadmin

  Ответить  
 
 автор: cheops   (27.02.2012 в 12:59)   письмо автору
 
   для: pautina   (27.02.2012 в 12:35)
 

Тогда без SET NAMES все должно работать... у вас текст когда вставляете по-русски без крокозябликов?

  Ответить  
 
 автор: pautina   (27.02.2012 в 13:22)   письмо автору
 
   для: cheops   (27.02.2012 в 12:59)
 

Я так и делал вначале, но при выполнении запроса ошибка идёт.
Мне бы хоть определить в какой строке ошибка или к какой записи по id она относится.
Пишет якобы символ недопустимый

There seems to be an error in your SQL query. The MySQL server error output below, if there is any, may also help you in diagnosing the problem
ERROR: Unknown Punctuation String @ 831738
STR: ><

Вы посмотрите запрос в прикреплёном выше файле.

  Ответить  
 
 автор: Lotanaen   (27.02.2012 в 13:44)   письмо автору
 
   для: pautina   (27.02.2012 в 13:22)
 

Вы одинарные кавычки в тексте с xtml-кодом уберите или экранируйте. Например в 12 строке есть не экранированные : - ... >Сымпровизировал слегка, поиздевался над собой :'') ...

  Ответить  
 
 автор: pautina   (27.02.2012 в 14:31)   письмо автору
 
   для: Lotanaen   (27.02.2012 в 13:44)
 

Как экранировать нужно как то код в запросе менять?

  Ответить  
 
 автор: Lotanaen   (27.02.2012 в 15:03)   письмо автору
 
   для: pautina   (27.02.2012 в 14:31)
 

да, менять код, в приведенном мной выше фрагменте это будет выглядеть так : - ... >Сымпровизировал слегка, поиздевался над собой :\'\') ...

  Ответить  
 
 автор: pautina   (27.02.2012 в 15:09)   письмо автору
 
   для: Lotanaen   (27.02.2012 в 15:03)
 

И как код запроса тогда будет выгледеть?
У меня там строк много 244 штуки.
в поле Field 3 содержится html код который нужно экранировать.
можно использовать mysql_escape_string или mysql_real_escape_string
вот здесь кое что возможно взять можно http://www.myfirstsite.ru/articles/safe-web-programming-with-php

CREATE TABLE IF NOT EXISTS material_content_into244 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) TYPE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO material_content_into244 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES 
...

как изменить запрос?

  Ответить  
 
 автор: Lotanaen   (27.02.2012 в 16:10)   письмо автору
 
   для: pautina   (27.02.2012 в 15:09)
 

Вам быстрей будет вручную пройти запрос и все лишние одинарные кавычки либо удалить либо экранировать. А вообще-то Вы этот запрос каким образом делали? В ручную?

  Ответить  
 
 автор: pautina   (27.02.2012 в 17:21)   письмо автору
 
   для: Lotanaen   (27.02.2012 в 16:10)
 

Хорошо если вручную проверять код запроса какие символы нужно искать?
Что значит экранировать, как это можно сделать?

  Ответить  
 
 автор: Lotanaen   (27.02.2012 в 17:53)   письмо автору
 
   для: pautina   (27.02.2012 в 17:21)
 

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

  Ответить  
 
 автор: pautina   (27.02.2012 в 18:20)   письмо автору
 
   для: Lotanaen   (27.02.2012 в 17:53)
 

Какой именно символ мешает правильному выполнению запроса?

  Ответить  
 
 автор: Valick   (27.02.2012 в 18:52)   письмо автору
 
   для: pautina   (27.02.2012 в 18:20)
 

я вам сутки назад написал про функцию mysql_real_escape_string неужели так сложно прочитать?

  Ответить  
 
 автор: pautina   (27.02.2012 в 18:57)   письмо автору
 
   для: Valick   (27.02.2012 в 18:52)
 

Как мне беря за основу этот код

<?php
// Соединение
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

// Запрос
$query sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            
mysql_real_escape_string($user),
            
mysql_real_escape_string($password));
?>

Экранировать поле Field 3 в моём запросе

CREATE TABLE IF NOT EXISTS material_content_into28 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT IGNORE INTO material_content_into28 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES  
('1','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A> 
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>
...

  Ответить  
 
 автор: Valick   (27.02.2012 в 19:33)   письмо автору
 
   для: pautina   (27.02.2012 в 18:57)
 

из этого кода за основу взять можно только РНР теги <?php и ?>
<?php
// установить соединение с MySQL, установить кодировку, выбрать базу
$field1="Уроки Photoshop";
$field2="Рубрика: Эффекты";
$field3="<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A> 
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>"
;

$field1=mysql_real_escape_string($field1);
$field2=mysql_real_escape_string($field2);
$field3=mysql_real_escape_string($field3);

$query="INSERT IGNORE INTO material_content_into28 (`ID`,`Field 1`,`Field 2`,`Field 3`)
    VALUES('1',
$field1,$field2,$field3)";
$res=mysql_query($query);
?>

  Ответить  
 
 автор: pautina   (27.02.2012 в 19:38)   письмо автору
 
   для: Valick   (27.02.2012 в 19:33)
 

а какой либо скрипт можно написать чтоб он мог экранировать поле в тексте запроса при создании самого этого поля.
Такое написать можно?

  Ответить  
 
 автор: Valick   (27.02.2012 в 19:53)   письмо автору
 
   для: pautina   (27.02.2012 в 19:38)
 

можно, если хотя бы пол книги прочитать

  Ответить  
 
 автор: pautina   (27.02.2012 в 19:54)   письмо автору
 
   для: Valick   (27.02.2012 в 19:53)
 

Просьба к модератору форума,
Ни могли бы Вы удалить прикреплённый файл запроса в этой ветке.

[поправлено модератором: выполнено]

  Ответить  
 
 автор: Lotanaen   (28.02.2012 в 10:07)   письмо автору
 
   для: pautina   (27.02.2012 в 18:20)
 

Я не пойму - вы внимательно читаете ответы на ваши вопросы? Складывается такое впечатление, что Вы практически не читаете их, а ждете сразу готовое решение вашей проблемы не пытаясь даже понять что и для чего Вам советуют. Вы почитай те что я Вам выше писал - там указано какой символ нужно экранировать. И почему Вы не отвечаете на уточняющие вопросы? Я нашел у Вас в дампе таблицы первые не экранированные символы и указал Вам где? Ищите дальше и исправляйте - в чем проблема то?

  Ответить  
 
 автор: pautina   (28.02.2012 в 12:05)   письмо автору
819.1 Кб
 
   для: Lotanaen   (28.02.2012 в 10:07)
 

Сечас я ищу ошибку в большом запросе, первое попадание ошибки приходится на 28 запись,
'28'
тоесть 27 записей создаются по запросу, ошибка которую вы нашли идёт до 27 записи
Если сивол экранирования который вы указали идёт до 28 записи, то на создание большого запроса он никак не влияет

  Ответить  
 
 автор: Lotanaen   (29.02.2012 в 12:38)   письмо автору
 
   для: pautina   (28.02.2012 в 12:05)
 

Ну значит еще есть другие не экранированные символы.

  Ответить  
 
 автор: Valick   (26.02.2012 в 14:04)   письмо автору
 
   для: pautina   (26.02.2012 в 13:47)
 

вы пихаете в базу данные вместе с html тегами, да еще и со стилями, какой в этом смысл?
применяйте хотя бы mysql_real_escape_string
а то и тип поля BINARY если вам не нужен поиск по этому "фаршу"

ERROR: Unknown Punctuation String
тут вроде даже переводить не надо

[поправлено модератором]

  Ответить  
 
 автор: pautina   (26.02.2012 в 14:12)   письмо автору
 
   для: Valick   (26.02.2012 в 14:04)
 

Ну да пишет что неизвестная строка пунктуации,
а что longtext не подойдёт для описания поля Field 3
`Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Для 3 строк ведь запрос таблицу формировал.
Какой тогда тип данных для Field 3 лучше использовать в этом поле и правдо напихано всё что можно, и стили и html код, по длине строка может достигать до 10000 строк

  Ответить  
 
 автор: pautina   (26.02.2012 в 14:24)   письмо автору
 
   для: pautina   (26.02.2012 в 14:12)
 

вообще longtext должен идти
http://yapro.ru/web-master/mysql/tipi-poley-v-mysql.html
может какой другой аналог типа данных использовать?

  Ответить  
Rambler's Top100
вверх

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