Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kodem php przy imporcie do bazy MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
pejot
Witam,

Mam problem z importem danych do bazy mysql.

Sprawa wygląda następująco. Skrypt odpytuje bazę (tabelę) w której jest nazwa i ID potem z pliku txt pobiera dane. Pierwszą wartością w pliku txt jest nazwa która znajduje się w zaczytanej tabeli i dodaje dane do nowej tabeli.

Zerknijcie proszę na kod bo dodaje mi 134 rekordy i przerywa działanie i nie mogę dojść co to może być bo w logach nie mam żadnych informacji. Uruchomiłem xdebug na netbeans i też nie daje informacji.

Czy kodowanie plików ma tu jakiś wpływ?

  1. <?php
  2.  
  3. require_once 'bazadanych.inc.php';
  4.  
  5. $bd = new operacjaDB("localhost", "root", "", "car_spec");
  6.  
  7.  
  8.  
  9. $plk = trim(file_get_contents('kierunki.txt'));
  10. $plk = explode("\r\n", $plk);
  11. $tmpCount = count($plk);
  12. echo $tmpCount;
  13. for ($i = 0; $i < $tmpCount; $i++) {
  14.  
  15. $line = explode(';', trim($plk[$i]));
  16.  
  17. $wydzial = mysql_real_escape_string($line[0]);
  18. //$rodzajstudiow = mysql_real_escape_string($line[1]);
  19. // $oe = mysql_real_escape_string($line[2]);
  20. // $plt = mysql_real_escape_string($line[3]);
  21. //$width = mysql_real_escape_string($line[4]);
  22. //$series = mysql_real_escape_string($line[5]);
  23. //$zr = mysql_real_escape_string($line[6]);
  24. //$r = mysql_real_escape_string($line[7]);
  25. //$rim = mysql_real_escape_string($line[8]);
  26. //$li = mysql_real_escape_string($line[9]);
  27. //$si = mysql_real_escape_string($line[10]);
  28. //$axle = mysql_real_escape_string($line[11]);
  29. //$rfxlc = mysql_real_escape_string($line[12]);
  30. //$pr = mysql_real_escape_string($line[13]);
  31. //$fouronfour = mysql_real_escape_string($line[14]);
  32. //$barpartfront = mysql_real_escape_string($line[15]);
  33. //$barpartrear = mysql_real_escape_string($line[16]);
  34. //$barfullfront = mysql_real_escape_string($line[17]);
  35. //$barfullrear = mysql_real_escape_string($line[18]);
  36. //$homo = mysql_real_escape_string($line[19]);
  37.  
  38. $wydzial_id = $bd->podajIdWydzialu($wydzial);
  39. //echo $wydzial_id;
  40. //$rodzajstudiow_id = $bd->podajIdRodzajuStudiow($rodzajstudiow);
  41. //echo $rodzajstudiow_id;
  42.  
  43. if ($wydzial_id) {
  44.  
  45. $q = "
  46.  
  47. INSERT INTO
  48. spec (engine_id)
  49. VALUES
  50. ('$wydzial_id')
  51.  
  52. ";
  53.  
  54. $res = $bd->sendQuery($q) or die(mysql_error());
  55.  
  56. } else {
  57. echo '<br /><strong>BŁĄD!</strong><br />';
  58. }
  59.  
  60. }
  61.  
  62.  
  63.  
  64.  
  65. ?>


echo $tmpCount; - daje mi rezultat ~ 8000 rekordów czyli ok
Ale potem w pętli się krzaczy :/
mar1aczi
Czas wykonywania skryptu nie jest za długi?
pejot
Nie to nie to bo skrypt używany był do innej tabeli przy ilości 2k rekordów i było ok.

Cz może być to winą kodowania bazy?

Co zauważyłam:

Jak wszystko mam w utf8 i gdy uruchamiam skrypt nie dodaje mi żadnego rekordu a gdy w notepad skonwertuję plik tekstowy na ANSI to dodaje mi 134 rekordy do bazy!

Głupieje po mału.
_Borys_
Wylistuj sobie po kolei $wydzial i gdy zatrzyma działanie sprawdź w pliku w następnej linii co jest nie tak.
pejot
Niestety wylistowanie też nic nie daje bo dostaje wynik 208 rekordów (z 8k) na stronie i skrypt przerywa działanie bez komunikatów.

Troszkę zmodernizowałem bazę i zapytanie teraz inaczej wygląda. Może problemem jest brak wystarczającej wiedzy i coś w kodzie popsułem. Proszę zerknijcie


Kod główny:

  1. <?php
  2. require_once 'bazadanych.inc.php';
  3.  
  4. $bd = new operacjaDB("localhost", "root", "", "car_spec");
  5.  
  6. $plk = trim(file_get_contents('dane_engine_model_mark.txt'));
  7. $plk = explode("\r\n", $plk);
  8. $tmpCount = count($plk);
  9. echo $tmpCount;
  10. for ($i = 0; $i < $tmpCount; $i++) {
  11.  
  12. $line = explode(';', trim($plk[$i]));
  13.  
  14. $engine = mysql_real_escape_string($line[0]);
  15. $model = mysql_real_escape_string($line[1]);
  16. $model_mark = mysql_real_escape_string($line[2]);
  17.  
  18. echo "$model";
  19.  
  20. $engine_id = $bd->podajIDengine($engine);
  21. $model_id = $bd->podajIdModelu($model);
  22. $mark_id = $bd->podajIdMarki($model_mark);
  23.  
  24. if ($mark_id ) {
  25.  
  26. $q = "
  27.  
  28. INSERT INTO
  29. engine_has_model ( engine_id ,model_id, model_mark_id)
  30. VALUES
  31. ( '$engine_id','$model_id', '$mark_id')
  32.  
  33. ";
  34. //echo "$q";
  35. echo "<br>";
  36. $res = $bd->sendQuery($q);
  37. } else {
  38. }
  39.  
  40. }
  41.  
  42. ?>


I bazadanych.inc.php

  1. ?<?php
  2.  
  3. class operacjaDB
  4. {
  5.  
  6. var $nazwabazydanych;
  7. var $link;
  8.  
  9. function operacjaDB($AServer = "localhost", $AUser = "root", $APassword = "", $ADatabase = "car_spec")
  10. {
  11. $this->link = mysql_connect($AServer, $AUser, $APassword);
  12.  
  13. if ($ADatabase) {
  14. $this->nazwabazydanych = $ADatabase;
  15. mysql_select_db($this->nazwabazydanych);
  16. }
  17.  
  18. mysql_query("SET NAMES utf-8");
  19. }
  20.  
  21. function sendQuery($AQuery)
  22. {
  23. return mysql_query($AQuery);
  24. }
  25.  
  26. function podajIDengine($AEngine)
  27. {
  28. $robq = "SELECT id FROM engine WHERE engine='$AEngine'";
  29.  
  30. return $this->getSingleResult($robq);
  31. }
  32.  
  33. function podajIdModelu($Amodel)
  34. {
  35. $robq = "SELECT id FROM model WHERE model='$Amodel'";
  36.  
  37. return $this->getSingleResult($robq);
  38.  
  39. }
  40.  
  41. function podajIdMarki($AMarka)
  42. {
  43. $robq = "SELECT id FROM mark WHERE mark='$AMarka'";
  44.  
  45. return $this->getSingleResult($robq);
  46. }
  47.  
  48.  
  49. }
  50. ?>


WItam,

Temat do zamknięcia.

Problem leżał w konstrukcji bazy danych a mianowicie parametry komórek były źle ustawione.

Dziękuję wszystkim za okazaną mi pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.