Jak wypełniać baze danych losowymi rekordami

0

Potrzebuje skryptu co będzie wstawiał mi np 1000000 losowych rekordów do bazy danych. Mam problemy bo ten kod nie wstawia .

 <?php
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die("Nie można się połączyć:". mysql_error());
  }

// Tworzenie bazy danych
/*if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo " Baza danych utworzona ";
  }
else
  {
  echo " Tworzenie bazy danych wystąpił błąd: " . mysql_error();
  }

// Tworzenie tabeli
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Osoby
(
Imie varchar(15),
Nazwisko varchar(15),
Wiek int
)";
*/

$imiona = array('Paweł', 'Ania', 'Kasia', 'Ewa');
$nazwiska = array('Nowak', 'Kowalski', 'Wiśniewski', 'Kuboszek');
$wieki =array('3','5','1','5');

for($i=0; $i<100; $i++)
{
   $nazwisko = $nazwiska[rand(0, count($nazwiska) - 1)];
   $imie = $imiona[rand(0, count($imiona) - 1)];
   $wiek = $wieki[rand(0,count($wieki) - 1)];
   $msql = 'INSERT INTO `my_db` (`Imie`, `Nazwisko`,`Wiek`) VALUES ("'.$imie.'", "'.$nazwisko.'", "'.$wiek.'")';
}

// Wykonanie kwerendy


mysql_close($con);
?>
1

Może zacznij od przepisania kodu tak, by zamiast zamiast 100 zapytań wykonało się jedno.
Samo zapytanie zbuduj w pętli, a dopiero potem je wykonaj.

INSERT INTO `my_db`
   (`Imie`, `Nazwisko`,`Wiek`)
VALUES
  ('Imie1', 'Nazwisko1', 'Wiek1'),
  ('Imie2', 'Nazwisko2', 'Wiek2'),
  ('Imie3', 'Nazwisko3', 'Wiek3'),
  ('Imie4', 'Nazwisko4', 'Wiek4');
1

Pewnie dlatego nic się nie dzieje, bo nie wykonujesz żadnego mysql_query (które swoją drogą jest zdeprecjonowane podobnie jak inne mysql_*).

0

poprawiłem to ale dalej nic

 <?php
$con = mysqli_connect("localhost","root","");
if (!$con)
  {
  die("Nie można się połączyć:". mysqli_error());
  }

// Tworzenie bazy danych
/*if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo " Baza danych utworzona ";
  }
else
  {
  echo " Tworzenie bazy danych wystąpił błąd: " . mysql_error();
  }

// Tworzenie tabeli
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Osoby
(
Imie varchar(15),
Nazwisko varchar(15),
Wiek int
)";
*/

$imiona = array('Paweł', 'Ania', 'Kasia', 'Ewa');
$nazwiska = array('Nowak', 'Kowalski', 'Wiśniewski', 'Kuboszek');
$wieki =array('3','5','1','5');

for($i=0; $i<100; $i++)
{
   $nazwisko = $nazwiska[rand(0, count($nazwiska) - 1)];
   $imie = $imiona[rand(0, count($imiona) - 1)];
   $wiek = $wieki[rand(0,count($wieki) - 1)];
   $msql = 'INSERT INTO `my_db` (`Imie`, `Nazwisko`,`Wiek`) VALUES ("'.$imie.'", "'.$nazwisko.'", "'.$wiek.'")';
}

// Wykonanie kwerendy
mysqli_query($con,$msql);

mysqli_close($con);
?>
3

Teraz wykonujesz jedno zapytanie, dodając jeden rekord.

0

Udał mi się to zrobić. Dlaczego mi różną ilość rekordów do tabeli wpisuje raz 413 , 426. Ja powinno być 1000. Jak zrobić na stronie czas mierzący ładowanie

<?php
error_reporting(0);
$con = mysqli_connect("localhost","root","","my_db");
if($con)
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

for($i=0; $i<1000; $i++)
{
$query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ('imie', 'nazwisko', 'wiek')";
mysqli_query($con,$query);
}

mysqli_close($con);
?> 
1

Może problemem jest zbyt długi czas wykonywania skryptu? Wykonujesz 1000 insertów do bazy zamiast 1. Może spróbuj:

$query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ";
for($i=0; $i<1000; $i++)
{
	$query .= "('imie', 'nazwisko', 'wiek'),";
}
$query = substr($query, 0, -1); // na końcu nie może być przecinka więc go ucinam

wtedy pójdzie tylko jedno zapytanie.

[Mirek]

0

Działa to ale maksymalnie 10000 mi dodaj dlaczego nie można więcej ? Znacie jaką funkcje, która mierzyła by wykonanie czasu skryptu i wyświetlała ją.

1

Może proces PHP jest ubijany (time limit) czy coś.

0

wyłączyłem to już

$stara_wartosc = ini_set ( 'max_execution_time', 0 );

dodanie znacznika <code class="php"> - @furious programming

1
Cyber999 napisał(a):

Znacie jaką funkcje, która mierzyła by wykonanie czasu skryptu i wyświetlała ją.

Na początku skryptu piszesz:

function utime (){
	$time = explode( " ", microtime());
	$usec = (double)$time[0];
	$sec = (double)$time[1];
	return $sec + $usec;
}
$start = utime(); 

Na końcu:

$end = utime(); 
$run = $end - $start; 
echo "Czas generowania strony: " . substr($run, 0, 5) . " secs."; 
0

@Cyber999
Sprawdź max_allowed_packet , domyślnie jest ustawiony nisko.
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet

1 użytkowników online, w tym zalogowanych: 0, gości: 1