mysql... Abfrage ob ein Wert *irgendwo* in der DB vorkommt
Jenny
- php
Hi :)
Ich hab ein Problem und zwar möchte ich eine Abfrage machen, ob ein Wert (z. B. $test) irgendwo in der Datenbank 'xyz' vorkommt. Wenn ja, soll er die Meldung ausgeben "Der Datensatz existiert schon", wenn nicht soll er den Wert eintragen.
Ich hab es mit einer while-Schleife probiert, aber es funktioniert nicht (ich bin das Problem wohl falsch angegangen):
$abfrage = "SELECT * FROM xyz";
$ergebnis = mysql_query($abfrage);
while ($row = mysql_fetch_array ($ergebnis))
{
if($test == $row['test']) {
echo "Der Datensatz existiert schon";
} else {
echo "Der Datensatz wird eingetragen";
}
Aber bei diesem Beispiel fragt er ja jeden Wert in der Tabelle einzeln ab. Habe ich 20 Werte drin, dann erscheint 20 mal die Meldung "Der Datensatz wird eingetragen". Das soll natürlich nur einmal sein...
Wie mache ich das?
LG
Jenny
Hallo!
$abfrage = "SELECT * FROM xyz";
$ergebnis = mysql_query($abfrage);
bis hierher OK, und wie ich weiter machen würde steht hier: http://php3.de/manual/de/function.mysql-num-rows.php
Diese Funktin gibt dei die Anzahl der Treffer zurück, wenn die 1 ist hast Du einen Treffer, bei 0 keinen, bei 30 hast Du 30 Treffer..., mit der Zahl kannst Du dan machsn was Du willst, z.B. mit if($num >0) echo "mind. 1 Treffer in DB";
Grüße
Andreas
PS: Oben brauchst Du kein SELECT *, nimm lieber eine Spalte wie ID oder sowas.
Ok, Danke erstmal, das hilft mir schon weiter :)
ich habe es so versucht:
$abfrage = "SELECT * FROM xyz WHERE test == '$test'";
$ergebnis = mysql_query($abfrage);
$num_rows = mysql_num_rows($ergebnis);
Allerdings bekomme ich immer die Meldung
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/nrl/test.php on line 17
line 17 ist die Zeile mit $num_row = ...
Die Syntax ist doch korrekt, wo könnte denn das Problem liegen? :-S
LG
Jenny
Hallo!
$abfrage = "SELECT * FROM xyz WHERE test == '$test'";
$ergebnis = mysql_query($abfrage);
$num_rows = mysql_num_rows($ergebnis);Allerdings bekomme ich immer die Meldung
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/nrl/test.php on line 17
line 17 ist die Zeile mit $num_row = ...
Die Syntax ist doch korrekt, wo könnte denn das Problem liegen? :-S
Ich sehe keinen Fehler, vielleicht ist die Abfrage gescheitert, versuche mal:
$ergebnis = mysql_query($abfrage)
or die ("Fehler in der Abfrage:" mysql_error());
oder versuch es mal mit mysql_query($abfrage, $link)...
Bis auf die Abfrage an sich sieht das ganze richtig aus.
Grüße
Andreas
Moin!
$abfrage = "SELECT * FROM xyz WHERE test == '$test'";
WHERE test = '$test' <- keine doppelten Gleichheitszeichen für SQL verwenden!
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/nrl/test.php on line 17
Das ist ein Folgefehler. Da du den Erfolg der Datenbankabfrage nicht überprüft hast, stößt irgendeine Funktion, die auf das (nicht vorhandene) Datenbankergebnis zugreifen will, dann auf den Fehler und erzeugt diese Fehlermeldung.
Merken: Wenn diese Meldung kommt, ist nicht unbedingt die gemeldete Zeile falsch, sondern meist die vorhergehende Datenbankabfrage. Sie sollte dir signalisieren: Irgendwas mit der Datenbankabfrage stimmt nicht - sofern du keine Tippfehler gemacht hast. Deshalb ist es wichtig, den Erfolg einer Abfrage immer mit PHP-Mitteln zu prüfen.
Alle Datenbankfunktionen, die unbemerkt fehlschlagen können, geben im Fehlerfall in der Regel "false" zurück. Du kannst also immer mit
if ($ergebnis = mysql_query($abfrage))
{
// Hier das tun, wenn die Abfrage erfolgreich war
}
else
{
// Hier das tun, wenn die Abfrage einen Fehler ergab.
// Zum Beispiel:
echo "DB-Query ergab diesen Fehler: ".mysql_error()."<br>Die SQL-Abfrage lautete: ".$abfrage."<br>";
// Es ist eine gute Idee, sich die SQL-Abfrage mit ausgeben zu lassen, insbesondere, wenn Variablen eingebaut werden - die führen gerne zu unvorhersehbaren Komplikationen.
}
Denn du hast es hier mit zwei unabhängigen Systemen zu tun, bei denen Fehler im einen System nicht zwingend Fehler im anderen System bedeuten müssen. Dein PHP-Skript kann programmlogisch perfekt sein - wenn deine SQL-Abfrage falsch ist, passiert trotzdem nicht das, was du wolltest.
- Sven Rautenberg
Hallo,
Ich hab ein Problem und zwar möchte ich eine Abfrage machen, ob ein Wert (z. B. $test) irgendwo in der Datenbank 'xyz' vorkommt. Wenn ja, soll er die Meldung ausgeben "Der Datensatz existiert schon", wenn nicht soll er den Wert eintragen.
Laß die Datenbank für Dich arbeiten.
Mit
SELECT count(*) FROM TABELLE
WHERE [BEDINGUNG]
bekommst Du ja bekanntlich die Anzahl der Datensätze die der angegebenen Bedingung entsprechen.
Ist die Anzahl > 0, dann gibt's bereits entsprechende Datensätze.
In Deinem Beispiel würde es also
SELECT count(*) FROM xyz
WHERE test = '$test'
oder so sein.
Das ist i.d.R. wesentlich performanter als irgendeine selbstprogrammierte Ermittlung, da Datenbanksysteme gerade für diese Aufgaben optimiert sind bzw. Optimierungsmöglichkeiten bereitstellen (Stichwort Indizes).
Grüße
Klaus