Engetragene Datensätze ermitteln PHP & MySQL

TTlong

Angesehenes Mitglied
Hallo,

ich habe ein PHP-Script welches mehrere tausend Zeilen einer Textdatei einliest und diese Werte in einer MySQL-DB speichert.

Die jeweiligen Spalten der DB sind als UNIQUE gesetzt, sodass jeder Eintrag nur einmal vorkommt/vorkommen darf.

Gibt es eine Möglichkeit herauszufinden, wieviele Datensätze das Script nun auch tatsächlich eingetragen hat (doppelte Werte also unberücksichtigt lässt)?

PS: Die Lösung wäre zwar im Prinzip recht simpel, wenn ich die Anzahl der Datensätze vorher/nacherher einfach vergleiche, aber es gibt doch bestimmt vorgefertigte Funktionen dafür, oder?

PS 2: Vielleicht kann ein Mod noch eben den Titel des Threads um das fehlende "i" nach dem "E" ergänzen. Danke.

Danke schonmal und Gruß TTlong
 
Hi,

mysql_affected_rows() funktioniert aber irgendwie nur, wenn ich den Eintrag einzeln vornehme, ich habe aber tausende Einträge per Scriptaufruf (Schleife) und bekomme immer den Wert -1 zurück?

Wo soll ich mysql_affected_rows() aufrufen?

Hier mein Script:

QUOTE $filename = "txt/datei.txt";
$lines = count(file("$filename"));
$con = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die();
mysql_select_db($mysqldb, $con) or die();

$fp = @fopen($filename,"r");
if (!$fp) {
    print "File $filename doesn't exist.";
} else {
    while (!feof($fp)) {
   
$text = trim(fgets($fp));
$val1 = utf8_decode($plaintext);
$val2 = urlencode($plaintext);

mysql_query("INSERT INTO table1 (text, val1) VALUES ('$text', '$val1)");
mysql_query("INSERT INTO table2 (text, val2) VALUES ('$text', '$val2)");
    }
}
echo "<strong>$lines</strong> Zeilen insgesamt bearbeitet.";

mysql_close($con);
 
Aus http://de3.php.net/mysql_affected_rows :
"Returns the number of affected rows on success, and -1 if the last query failed."
hinter dem $val1 und $val2 fehlt jeweils ein '
Außerdem wird das ohnehin nicht so funktionieren wie du es willst, da mysql_affected_rows immer nur für das letzte Query gillt. Das heißt du müsstest es schon in die Schleife packen und dann zählen, je nachdem ob der Datensatz hinzugefügt wurde oder nicht (und das für beide Tabellen). Erst nach der Schleife könntest du dann die Summe ausgeben.
Ein simples SELECT count(*) FROM table am Anfang und am Ende jeweils für beide Tabellen dürfte aber wesentlich einfacher und performanter sein...
 
CODE $filename = "txt/datei.txt";
$lines = count(file("$filename"));
$con = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die();
mysql_select_db($mysqldb, $con) or die();

$counter = 0;
$fp = @fopen($filename,"r");
if (!$fp) {
   print "File $filename doesn't exist.";
} else {
   while (!feof($fp)) {
   
$text = trim(fgets($fp));
$val1 = utf8_decode($plaintext);
$val2 = urlencode($plaintext);

$insert1 = mysql_query("INSERT INTO table1 (text, val1) VALUES ('$text', '$val1)");
$insert2 = mysql_query("INSERT INTO table2 (text, val2) VALUES ('$text', '$val2)");
if(mysql_affected_rows($insert1) > 0 AND mysql_affected_rows($insert2) > 0) $counter++;
   }
}
echo "<strong>$lines</strong> Zeilen insgesamt bearbeitet.";

mysql_close($con);


$counter enthält die Anzahl der erfolgreich eingetrangenen Datensätze. Ich empfehle aber ebenfalls einfach die Datensätze davor und danach zu zählen.
 
Zurück
Oben