|
|
|
|
<?
$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);
// ...
}
?>
|
Почему этот скрипт на экран выводит правильно, а в базу не заносит? | |
|
|
|
|
|
|
|
для: maxim14
(01.04.2011 в 18:12)
| | Проверьте, не возвращает ли он какую-нибудь ошибку
<?php
...
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
...
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 18:54)
| | Огромное спасибо за Ваш труд! Посоветуйте литературу по PHP и MySQL.
Выдает такую ошибку Got a packet bigger than 'max_allowed_packet' bytes
Ну вот с этом даже не знаю как бороться | |
|
|
|
|
|
|
|
для: 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);
}
?>
|
| |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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());
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.04.2011 в 19:56)
| | Спасибо огромное! Заработало. Только вставляет почему-то только 289 строк | |
|
|
|
|
|
|
|
для: maxim14
(01.04.2011 в 20:57)
| | А в файле их сколько?
PS проверьте каждую функцию mysql_query() и выведите результат (сработало/не сработало) в лог-файл, чтобы можно было контролировать процесс. | |
|
|
|
|
|
|
|
для: 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 и они абсолютно одинаковы по содержанию | |
|
|
|
|
|
|
|
для: maxim14
(01.04.2011 в 23:35)
| | Если не сложно выведите значение count($arr) - сколько элементов в массиве $arr? | |
|
|
|
|
|
|
|
для: cheops
(02.04.2011 в 00:47)
| | Здравствуйте! Поставил скрипт на другой домен и все заработало - заносит все строки в базу данных, а в конце выводит Duplicate entry '28522' for key 'PRIMARY | |
|
|
|
|
|
|
|
для: maxim14
(02.04.2011 в 17:22)
| | В файле где-то дублируется первичный ключ id (с номером 28522). | |
|
|
|
|
|
|
|
для: cheops
(02.04.2011 в 19:13)
| | Спасибо! Я уже нашел. Скажите, я решил для практики преобразовать этот скрипт в более сложный, вот алгоритм:
<?
Устанавливаем соеденение и выбираем БД.
Делаем выборку из определенной таблицы и помещаем массив в переменную 'sql1'
помещаем в переменную sql массив из текстового файла и столбцу 'price' присваеваем новое значение -5% (скидка 5%)
Далее по столбцам 'code' и ' name' наодим одинаковые строки и заносим в БД новое значение 'price' и в столбец 'status' заносим 1 ,если нет совпадений то заносим в столбец 'status' - 0
?>
Скажите пожалуйста, правильно я составил алгоритм? | |
|
|
|
|
|
|
|
для: maxim14
(02.04.2011 в 19:41)
| | Хм... а чего добиться хотите? Если потренироваться, то все правильно - курочте базу как вздумается, смотрите на результаты, анализируйте их, главное, чтобы голова и руки были заняты, чем дольше и интенсивнее работаете, тем больше информации о базе данных уложиться в голове. Даже потом, когда будете читать, если опыт работы с базой данных был большим - информация будет усваиваться гораздо быстрее.
Если же в этих преобразованиях есть практический смысл, то лучше все манипуляции делать уже над базой данных, когда данные лягут в таблицы. | |
|
|
|
|
|
|
|
для: cheops
(02.04.2011 в 21:02)
| | Добиться хочу чтоб без ошибок кодить, а то теория вроде понимается а через неделю вспомнить уже не могу. Получился у меня такой неработающий скрипт который в существующую базу должен заносить цену со скидкой 5% и ставить статус 1 если есть в текстовом файле и 0 если нет.
<?
$result= mysql_query("SELECT `name`,`code`, from trika_towar",$db);
$sql1= mysql_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= 1 ;
$query = "UPDATE `trika_towar` SET `price` = $line[4], `status` = $status";
mysql_query ($quere);
}
else
{
$status= 0 ;
$query = " UPDATE `trika_towar` SET `status` = $status ";
mysql_query ($quere);
}
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
?>
|
Понять не могу где ошибся | |
|
|
|
|