|
|
|
| Здравствуйте мне нужно по запросу создать таблицу
Таблица большая состоит из 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&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&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 строк запрос таблицу не создаёт (причём синтаксис запроса который создаёт большую таблицу скорее всего правильный)
Что можно сделать с этой ошибкой, и в какой она строке? | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 13:47)
| | Каким скриптом/утилитой разворачивается таблица? Попробуйте TYPE в параметрах таблицы заменить на ENGINE. | |
|
|
|
|
|
|
|
для: 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).
|
Опять выходит это же сообщение о ошибке | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 14:09)
| | >Таблица разворачивается за счёт кода в блокнотовском файле
Нет имеется в виду, кто выполняет запросы из SQL-дампа и отправляет их серверу базы данных? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 14:26)
| | >Вообще я всегда просто делал вставлял блокнотовский код в запрос
А запрос чем выполняете? phpMyAdmin? | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 14:56)
| | Ну да запрос в phpMyAdmin выполняю | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 14:57)
| | Что у вас идет до строки?
CREATE TABLE IF NOT EXISTS material_content_into244
|
| |
|
|
|
|
|
|
|
для: 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 таблица не создаётся почему не ясно. | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 15:22)
| | Это вы уже писали, а до этой таблице в дампе что расположено? Нет ли в предыдущем запросе ошибки? | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 15:36)
| | Если запрос выполняется с ошибкой, после этого я всегда удаляю что было создано (таблица material_content_into244) | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 15:41)
| | Да, я тоже так поступаю, если дамп не очень большой... возвращаясь к решению проблемы, вы можете показать строки, которые идут перед строкой?
CREATE TABLE IF NOT EXISTS material_content_into244 (
|
| |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 15:48)
| | Давайте покажу как это сделать? | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 15:54)
| | Делать что? | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 15:58)
| | вы можете показать строки, которые идут перед строкой?
CREATE TABLE IF NOT EXISTS material_content_into244 (
|
Это первая строка с неё начинается формирование запроса.
а до этой таблице в дампе что расположено? Нет ли в предыдущем запросе ошибки?
может мне дамп нужно очистить
как это можно сделать
я могу делать запросы для создания таблицы из 5, 10 строк (копируя их из кода исходного запроса в 244 записи) и таким образом сужать область поиска на запись в которой содержится недопустимый символ, но это тоже не очень хороший вариант, (копировать нужно слишком много одним мышом не вытянешь)
можно ли определить в какой строке содержится недопустимый символ? | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 16:00)
| | Т.е. это строка первая в дампе, а phpMyAdmin не указывает конкретной строки? А много у вас таблиц в дампе? Попробуйте разбить его на части и выполнять дамп по частям, хоть одна часть выполняется? | |
|
|
|
|
|
|
|
для: cheops
(26.02.2012 в 17:23)
| | Да эта строка первая в дампе.
по запросу получается сделать таблицу из 10 строк.
Давайте я Вам файл прикреплю может вы его посмотрите, запрос сделаете, ошибку увидите,
Так может нам понятнее будет определить где ошибка. | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 18:09)
| | А вы как дамп разворачиваете? Через Импорт? У вас в таблицах написано, что они UTF8, в то время как сам дамп в кодировке Windows-1251. Напишите в начале дампа строку
и попробуйте развернуть его снова. | |
|
|
|
|
|
|
|
для: 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'? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 06:09)
| | Вы как дамп разворачиваете? Через Импорт? | |
|
|
|
|
|
|
|
для: cheops
(27.02.2012 в 11:53)
| | Я просто запрос текстовый ввожу на закладке sql в phpmyadmin | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 12:35)
| | Тогда без SET NAMES все должно работать... у вас текст когда вставляете по-русски без крокозябликов? | |
|
|
|
|
|
|
|
для: 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: ><
Вы посмотрите запрос в прикреплёном выше файле. | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 13:22)
| | Вы одинарные кавычки в тексте с xtml-кодом уберите или экранируйте. Например в 12 строке есть не экранированные : - ... >Сымпровизировал слегка, поиздевался над собой :'') ... | |
|
|
|
|
|
|
|
для: Lotanaen
(27.02.2012 в 13:44)
| | Как экранировать нужно как то код в запросе менять? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 14:31)
| | да, менять код, в приведенном мной выше фрагменте это будет выглядеть так : - ... >Сымпровизировал слегка, поиздевался над собой :\'\') ... | |
|
|
|
|
|
|
|
для: 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
...
|
как изменить запрос? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 15:09)
| | Вам быстрей будет вручную пройти запрос и все лишние одинарные кавычки либо удалить либо экранировать. А вообще-то Вы этот запрос каким образом делали? В ручную? | |
|
|
|
|
|
|
|
для: Lotanaen
(27.02.2012 в 16:10)
| | Хорошо если вручную проверять код запроса какие символы нужно искать?
Что значит экранировать, как это можно сделать? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 17:21)
| | экранировать - это обратный слэш \ поставить перед каждой одинарной кавычкой в каждой записи. Одинарные кавычки оставьте не экранированными только там где они используются для выделения содержимого записи. | |
|
|
|
|
|
|
|
для: Lotanaen
(27.02.2012 в 17:53)
| | Какой именно символ мешает правильному выполнению запроса? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 18:20)
| | я вам сутки назад написал про функцию mysql_real_escape_string неужели так сложно прочитать? | |
|
|
|
|
|
|
|
для: 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&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>
...
|
| |
|
|
|
|
|
|
|
для: 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&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);
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(27.02.2012 в 19:33)
| | а какой либо скрипт можно написать чтоб он мог экранировать поле в тексте запроса при создании самого этого поля.
Такое написать можно? | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 19:38)
| | можно, если хотя бы пол книги прочитать | |
|
|
|
|
|
|
|
для: Valick
(27.02.2012 в 19:53)
| | Просьба к модератору форума,
Ни могли бы Вы удалить прикреплённый файл запроса в этой ветке.
[поправлено модератором: выполнено] | |
|
|
|
|
|
|
|
для: pautina
(27.02.2012 в 18:20)
| | Я не пойму - вы внимательно читаете ответы на ваши вопросы? Складывается такое впечатление, что Вы практически не читаете их, а ждете сразу готовое решение вашей проблемы не пытаясь даже понять что и для чего Вам советуют. Вы почитай те что я Вам выше писал - там указано какой символ нужно экранировать. И почему Вы не отвечаете на уточняющие вопросы? Я нашел у Вас в дампе таблицы первые не экранированные символы и указал Вам где? Ищите дальше и исправляйте - в чем проблема то? | |
|
|
|
|
 819.1 Кб |
|
|
для: Lotanaen
(28.02.2012 в 10:07)
| | Сечас я ищу ошибку в большом запросе, первое попадание ошибки приходится на 28 запись,
'28'
тоесть 27 записей создаются по запросу, ошибка которую вы нашли идёт до 27 записи
Если сивол экранирования который вы указали идёт до 28 записи, то на создание большого запроса он никак не влияет | |
|
|
|
|
|
|
|
для: pautina
(28.02.2012 в 12:05)
| | Ну значит еще есть другие не экранированные символы. | |
|
|
|
|
|
|
|
для: pautina
(26.02.2012 в 13:47)
| | вы пихаете в базу данные вместе с html тегами, да еще и со стилями, какой в этом смысл?
применяйте хотя бы mysql_real_escape_string
а то и тип поля BINARY если вам не нужен поиск по этому "фаршу"
ERROR: Unknown Punctuation String
тут вроде даже переводить не надо
[поправлено модератором] | |
|
|
|
|
|
|
|
для: 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:12)
| | вообще longtext должен идти
http://yapro.ru/web-master/mysql/tipi-poley-v-mysql.html
может какой другой аналог типа данных использовать? | |
|
|
|