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

Форум MySQL

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

 

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

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

тема: Не срабатывает многострочный INSERT-запрос
 
 автор: maxim14   (01.04.2011 в 18:12)   письмо автору
 
 

 
<?
 $arr 
file("Полная база .txt");
  
$sql = array();
   
  for(
$i 0$i count($arr); $i++)
  {
    
$arr[$i] = trim($arr[$i]);
    
$line explode("\t"$arr[$i]);
  
    
$sql[] = "('{$line[0]}',
               '
{$line[1]}',
               '
{$line[2]}',
               '
{$line[3]}',
               '
{$line[4]}',
               '
{$line[5]}',
               '
{$line[6]}',
               '
{$line[7]}'
               )"
;
     }
                
              echo 
"<pre>";
  
print_r($sql);
  echo 
"</pre>"

 
  
   
  if(!empty(
$sql))
  {
    
// Формируем SQL-запрос
    
$query 'INSERT INTO `trika_towar` (`id`, `code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`) VALUES' .implode(","$sql);
    
mysql_query($query);
    
// ...
  
}
 
?> 



Почему этот скрипт на экран выводит правильно, а в базу не заносит?

  Ответить  
 
 автор: cheops   (01.04.2011 в 18:54)   письмо автору
 
   для: maxim14   (01.04.2011 в 18:12)
 

Проверьте, не возвращает ли он какую-нибудь ошибку
<?php
  
...
  if(!
mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
  ...
?>

  Ответить  
 
 автор: maxim14   (01.04.2011 в 19:00)   письмо автору
 
   для: cheops   (01.04.2011 в 18:54)
 

Огромное спасибо за Ваш труд! Посоветуйте литературу по PHP и MySQL.

Выдает такую ошибку Got a packet bigger than 'max_allowed_packet' bytes
Ну вот с этом даже не знаю как бороться

  Ответить  
 
 автор: cheops   (01.04.2011 в 19:05)   письмо автору
 
   для: maxim14   (01.04.2011 в 19:00)
 

Понятно, не влазит запрос в ограничение max_allowed_packet, для решения проблемы есть два пути:
1. Если это ваш собственный сервер (или вы работаете на локальном хосте), увеличьте значение max_allowed_packet в конфигурационном файле my.ini (после чего перезапустите MySQL-сервер), думаю 100 мегабайт вполне хватит, для обработки вашего запроса (впрочем ориентируйтесь на размер разбираемого файла).
2. Можно переработать скрипт, таким образом, чтобы он добавлял записи по одной строке
<?php
 $arr 
file("Полная база .txt"); 
  
$sql = array(); 
    
  for(
$i 0$i count($arr); $i++) 
  { 
    
$arr[$i] = trim($arr[$i]); 
    
$line explode("\t"$arr[$i]); 
   
    
$query "INSERT INTO `trika_towar` 
         (`id`, `code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`)
         VALUES' ('
{$line[0]}', 
               '
{$line[1]}', 
               '
{$line[2]}', 
               '
{$line[3]}', 
               '
{$line[4]}', 
               '
{$line[5]}', 
               '
{$line[6]}', 
               '
{$line[7]}
               )"

       
mysql_query($query); 
     } 
?> 

  Ответить  
 
 автор: maxim14   (01.04.2011 в 19:33)   письмо автору
 
   для: cheops   (01.04.2011 в 19:05)
 

При таком скрипте:

<?
$arr 
file("Полная база.txt"); 
  
$sql = array(); 
    
  for(
$i 0$i count($arr); $i++) 
  { 
    
$arr[$i] = trim($arr[$i]); 
    
$line explode("\t"$arr[$i]); 
   
$sql[] = "('{$line[0]}',
               '
{$line[1]}',
               '
{$line[2]}',
               '
{$line[3]}',
               '
{$line[4]}',
               '
{$line[5]}',
               '
{$line[6]}',
               '
{$line[7]}'
               )"

   
    
$query "INSERT INTO `trika_towar` 
         (`id`, `code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`)
         VALUES' ('
{$line[0]}', 
               '
{$line[1]}', 
               '
{$line[2]}', 
               '
{$line[3]}', 
               '
{$line[4]}', 
               '
{$line[5]}', 
               '
{$line[6]}', 
               '
{$line[7]}
               )"

       
mysql_query($query); 
     }  

  if(!
mysql_query($query)) exit("Запрос не выполнился по тому, что ".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 '' ('28522.', '70001870', 'Ясли сад яблоко-груш' at line 3

  Ответить  
 
 автор: cheops   (01.04.2011 в 19:56)   письмо автору
 
   для: maxim14   (01.04.2011 в 19:33)
 

Исправьте скрипт следующим образом (лишняя одиночная кавычка после VALUES)
<? 
$arr 
file("Полная база.txt");  
  
$sql = array();  
     
  for(
$i 0$i count($arr); $i++)  
  {  
    
$arr[$i] = trim($arr[$i]);  
    
$line explode("\t"$arr[$i]);  
   
$sql[] = "('{$line[0]}', 
               '
{$line[1]}', 
               '
{$line[2]}', 
               '
{$line[3]}', 
               '
{$line[4]}', 
               '
{$line[5]}', 
               '
{$line[6]}', 
               '
{$line[7]}
               )"
;  
    
    
$query "INSERT INTO `trika_towar`  
         (`id`, `code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`) 
         VALUES ('
{$line[0]}',  
               '
{$line[1]}',  
               '
{$line[2]}',  
               '
{$line[3]}',  
               '
{$line[4]}',  
               '
{$line[5]}',  
               '
{$line[6]}',  
               '
{$line[7]}'  
               )"
;  
       
mysql_query($query);  
     }   

  if(!
mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());  

   

?> 

  Ответить  
 
 автор: maxim14   (01.04.2011 в 20:57)   письмо автору
 
   для: cheops   (01.04.2011 в 19:56)
 

Спасибо огромное! Заработало. Только вставляет почему-то только 289 строк

  Ответить  
 
 автор: cheops   (01.04.2011 в 23:00)   письмо автору
 
   для: maxim14   (01.04.2011 в 20:57)
 

А в файле их сколько?

PS проверьте каждую функцию mysql_query() и выведите результат (сработало/не сработало) в лог-файл, чтобы можно было контролировать процесс.

  Ответить  
 
 автор: maxim14   (01.04.2011 в 23:35)   письмо автору
 
   для: cheops   (01.04.2011 в 23:00)
 

Позвольте Вас еще раз поблагадорить за то, что уделили мне, своё драгоценное время! Теперь точно куплю учебник по PHP.
А в файле около 20 000 строк. Я вставил как Вы говорили if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
он ошибок не выдает, но скрипт прекращает свою работу, можно взглянуть http://zatop.info/bd8888.php
и в базу вставил около 300 строк, а самое главное что у первой записи id почему-то 35182 а у последнего 35183 и они абсолютно одинаковы по содержанию

  Ответить  
 
 автор: cheops   (02.04.2011 в 00:47)   письмо автору
 
   для: maxim14   (01.04.2011 в 23:35)
 

Если не сложно выведите значение count($arr) - сколько элементов в массиве $arr?

  Ответить  
 
 автор: maxim14   (02.04.2011 в 17:22)   письмо автору
 
   для: cheops   (02.04.2011 в 00:47)
 

Здравствуйте! Поставил скрипт на другой домен и все заработало - заносит все строки в базу данных, а в конце выводит Duplicate entry '28522' for key 'PRIMARY

  Ответить  
 
 автор: cheops   (02.04.2011 в 19:13)   письмо автору
 
   для: maxim14   (02.04.2011 в 17:22)
 

В файле где-то дублируется первичный ключ id (с номером 28522).

  Ответить  
 
 автор: maxim14   (02.04.2011 в 19:41)   письмо автору
 
   для: cheops   (02.04.2011 в 19:13)
 

Спасибо! Я уже нашел. Скажите, я решил для практики преобразовать этот скрипт в более сложный, вот алгоритм:
<?
Устанавливаем соеденение и выбираем БД.
Делаем выборку из определенной таблицы и помещаем массив в переменную 'sql1'

помещаем в переменную sql массив из текстового файла и столбцу 'price' присваеваем новое значение -5% (скидка 5%)

Далее по столбцам 'code' и ' name' наодим одинаковые строки и заносим в БД новое значение 'price' и в столбец 'status' заносим 1 ,если нет совпадений то заносим в столбец 'status' - 0
?>

Скажите пожалуйста, правильно я составил алгоритм?

  Ответить  
 
 автор: cheops   (02.04.2011 в 21:02)   письмо автору
 
   для: maxim14   (02.04.2011 в 19:41)
 

Хм... а чего добиться хотите? Если потренироваться, то все правильно - курочте базу как вздумается, смотрите на результаты, анализируйте их, главное, чтобы голова и руки были заняты, чем дольше и интенсивнее работаете, тем больше информации о базе данных уложиться в голове. Даже потом, когда будете читать, если опыт работы с базой данных был большим - информация будет усваиваться гораздо быстрее.
Если же в этих преобразованиях есть практический смысл, то лучше все манипуляции делать уже над базой данных, когда данные лягут в таблицы.

  Ответить  
 
 автор: maxim14   (02.04.2011 в 21:30)   письмо автору
 
   для: cheops   (02.04.2011 в 21:02)
 

Добиться хочу чтоб без ошибок кодить, а то теория вроде понимается а через неделю вспомнить уже не могу. Получился у меня такой неработающий скрипт который в существующую базу должен заносить цену со скидкой 5% и ставить статус 1 если есть в текстовом файле и 0 если нет.


<?
$result
mysql_query("SELECT `name`,`code`, from trika_towar",$db);
    
$sql1mysql_fetch_array ($result);
    
$sql1[]="('{$line1[0]}', 
               '
{$line1[1]}'
               
               )"
;  
   
   
$arr file("Полная база.txt");
   
$sql = array();
   
   for(
$i 0$i count($arr); $i++)  
  {  
    
$arr[$i] = trim($arr[$i]);  
    
$line explode("\t"$arr[$i]);  
    
$sql[] = "('{$line[0]}', 
               '
{$line[1]}', 
               '
{$line[2]}', 
               '
{$line[3]}', 
               '
{$line[4]}', 
               '
{$line[5]}', 
               '
{$line[6]}', 
                '
{$line[7]}'
               )"
;  
     
$line[4]= $line[4]-($line[4]*0.05);
     
     if (
$line1[0]==$line[1]  and $line[3]==$line1[1])
     {
     
$status;
     
$query "UPDATE `trika_towar` SET `price` = $line[4], `status` = $status";
     
mysql_query ($quere);
     
     }
     else
     {
     
$status;
     
$query " UPDATE `trika_towar` SET `status` = $status ";
     
mysql_query ($quere);
     
   
     }   

  if(!
mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());  

 

?> 




Понять не могу где ошибся

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

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