northwest
(northwest)
17 Grudzień 2013 10:12
#1
Witam serdecznie,
Mam do zaktualizowania ok 70.000 rekordów - parę razy dziennie.
Mój aktualny skrypt wygląda następująco:
$pobrany_plik_csv = $www_plik;
$url_pliku = 'http://'.$www_login.':'.$www_haslo.'@'.$www_domena_oraz_sciezka;
$db->query("UPDATE cms_produkty SET ilosc = '0' WHERE ate <> '0';");
file_put_contents($www_plik, fopen($url_pliku, 'r'));
$e = null;
$e2 = null;
$licze = 0;
$plik = fopen($www_plik, "r");
while( $wiersz = fgetcsv($plik, 4000, ",") )
{
if($wiersz['1'] !="0") {
if($wiersz[1] == "") $wiersz[1] = 0;
if($licze <= 5){
$licze = $licze + 1;
$result = mysql_query(" UPDATE cms_produkty SET ilosc = '$wiersz[1]' WHERE ate = '$wiersz[0]'; ") or die('Query failed: ' . mysql_error());
}
if($licze == 5){
$licze = 0;
$e2 = null;
}
}
}
?>
Skrypt pobiera plik poprawnie z 2 serwera jednak wykonywanie jogo trwa ok 30 minut i kończy się komunikatem: Blad w polaczeniu z baza danych [Too many connections]
Wie ktoś może dlaczego?
Bardzo proszę o pomoc:)
kostek135
(kostek135)
17 Grudzień 2013 12:05
#2
Możesz pokazać kod nawiązania połączenia?
krypton
(krypton)
17 Grudzień 2013 13:40
#3
$pobrany_plik_csv = $www_plik;
$url_pliku = 'http://'.$www_login.':'.$www_haslo.'@'.$www_domena_oraz_sciezka;
$db->query("UPDATE cms_produkty SET ilosc = '0' WHERE ate <> '0';");
file_put_contents($www_plik, fopen($url_pliku, 'r'));
$plik = fopen($www_plik, "r");
while( $wiersz = fgetcsv($plik, 4000, ",") )
{
if($wiersz['1'] !="0") {
if($wiersz[1] == "") $wiersz[1] = 0;
mysql_query(" UPDATE cms_produkty SET ilosc = '$wiersz[1]' WHERE ate = '$wiersz[0]'; ") or die('Query failed: ' . mysql_error());
}
}
Proszę sprawdzić czy uproszczony kod tez generuje błędy
krypton
(krypton)
17 Grudzień 2013 14:06
#5
Proszę sprawdzić zachowanie przy usunięciu ; z końca zapytania mysql_query
northwest
(northwest)
17 Grudzień 2013 21:21
#6
nie pomogło:(
zbudowałem taki skrypt:
file_put_contents($www_plik, fopen($url_pliku, 'r'));
$e = null;
$e2 = null;
$licze = 0;
$plik = fopen($www_plik, "r");
while( $wiersz = fgetcsv($plik, 4000, ",") )
{
if($wiersz['1'] !="0") {
if($wiersz[1] == "") $wiersz[1] = 0;
mysql_query(" INSERT INTO cms_temer (nazwa, ilosc) VALUES ($wiersz[0], $wiersz[1]); ") or die('Query failed: ' . mysql_error());
}
}
$update1 = null;
$update2 = null;
$update3 = null;
$iillee = 0;
$wynik = mysql_query(" SELECT * FROM cms_temer ;") or die('Query failed: ' . mysql_error());
while($rek = mysql_fetch_array($wynik)) {
if($iillee < 200) {
$update .= " UPDATE cms_produkty SET ilosc = '$rek[ilosc]' WHERE ate = '$rek[nazwa]'; ";
$update1 .= " WHEN $rek[nazwa] THEN '$rek[ilosc]' ";
$update2 .= " $rek[nazwa], ";
$update3 .=
$iillee = $iillee + 1;
}
if($iillee == 200){
$update2 = substr($update2, 0, -3);
$qqqqqq = "UPDATE cms_produkty SET ilosc = CASE ate
$update1
ELSE ilosc END
WHERE ate IN ($update2);
";
mysql_query($qqqqqq);
$update1 = null;
$update2 = null;
$update3 = null;
$iillee = 0;
}
}
ale też kurcze nie chce działać:(
krypton
(krypton)
17 Grudzień 2013 23:08
#7
Może zastosowanie mysql_pconnect() zamiast mysql_connect()