@dvoch

Автоматическое добавление в бд миллиона записей. Что сделано не правильно? Поможете разобраться?

$db = mysql_connect ("localhost","root","");
mysql_select_db ("test",$db);

$z = mysql_query("SELECT * FROM t", $db);
$rows = mysql_num_rows( $z );

echo $rows;

$i = $rows;
while ($i = 1000000) {
    $rz = mysql_query ("INSERT INTO t(ticket_id) VALUES(rand()*1000000)");

};

$start = microtime(true);
# ...
$time = microtime(true) - $start;
printf('<br>Скрипт выполнялся %.4F сек.', $time);


Добавлять в бд в таблицу до тех пор, пока количество не станет миллион.
К сожалению, происходит добавление без условия. Добавляет и добавляет.
Правда очень долго и падает где то на 700 тыщ. потом фатал еррор хнык.(в браузере пишет) mysql не настраивал. все работает по умолчанию. Open Server 5.2.2.

Буду очень признателен за помощь и любые мысли по этому поводу. :) Или, если вам совсем скучно, тоже пишите. :)
Сяп
  • Вопрос задан
  • 848 просмотров
Решения вопроса 1
@Nc_Soft
Функции mysql_* вообще устаревшие
while ($i = 1000000) это тоже самое что while (true)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Во-первых, у вас в while должно быть условие, а у вас присваивание.

Во-вторых, попробуйте партиями вносить данные, тысяч по 300-400.

В-третьих, у вас может в php.ini стоит лимит на время выполнения скрипта и этот лимит превышается, поэтому скрипт крашится.
Ответ написан
@utyfua
Вот вариант который должен практически летать подправил под pdo:
ini_set('mysql.connect_timeout', 10000);//тут можете поэкспериментировать
$start = microtime(true);//это же считает скок мы код выполняли и поэтому его нужно на самый верх
//$db = mysql_connect ("localhost","root","");
//mysql_select_db ("test",$db);
try {$bd=new PDO("mysql:host=localhost;dbname=test",$user,$pass,//думаю тут понятно что нужно заменить
array(PDO::ATTR_ERRMODE =>PDO::ERRMODE_WARNING));
}catch(PDOException $e){echo "#mysql_pdo #1 Fatal error! Not correct data for PDO(MYSQL) connection!";exit;}
//$z = mysql_query("SELECT * FROM t", $db);
//$rows = mysql_num_rows( $z );
$rows=$bd->query('SELECT count(*) FROM t')->fetch(PDO::FETCH_ASSOC)['count(*)'];
echo $rows;
$rz='';//создаем строковую переменную
for($i=$rows;$i<1000000;i++) {
    $rz.=("INSERT INTO t(ticket_id) VALUES(rand()*1000000);");//записываем запрос в строчку
};
//mysql_query ($rz);//одним запросом все отправляем
$bd->exec($rz);
unset($rz);//освобождаем память
echo '<br>Скрипт выполнялся ',microtime(true) - $start, 'сек';//че заа ужас тут был?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 22:33
25000 руб./за проект
23 апр. 2024, в 22:07
12000 руб./за проект