mysql_num_rows
Rainer
- php
Aloha!
Ich fange einen Formulareintrag ab:
$xy = $_POST['xy'];
nun würde ich gerne sehen ob bereits ein eintrag in der datenbank mit diesem namen schon vorhanden ist:
$eintragvorhanden = mysql_query("SELECT id FROM table WHERE table.name = ".$xy.";");
if(mysql_num_rows($titlevorhanden)==0){
$control4 = 0;
}else{
$control4 = 1;
$error5 = 'bereits vorhanden!';
}
Leider bekomme ich immer diesen Error:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
Kann mir jemand weiter helfen?
$eintragvorhanden und $titlevorhanden ist bei mir im script natürlich die selbe variabel
$eintragvorhanden und $titlevorhanden ist bei mir im script natürlich die selbe variabel
1. Wieso benutzt du 2 Variablen für ein und die selbe Sache? Das verwirrt nur.
2. mysql_query("SELECT id FROM table WHERE table.name = ".$xy.";"); Da fehlt die Datenbankverbindung.
-> mysql_query($strQuery, $objMySQLHandle);
Gruß
Datenbankverbundener
T-Rex
Hi!
- mysql_query("SELECT id FROM table WHERE table.name = ".$xy.";"); Da fehlt die Datenbankverbindung.
-> mysql_query($strQuery, $objMySQLHandle);
Nein, die fehlt nicht unbedingt. Wenn nichts angegeben wurde, wird die zuletzt geöffnete verwendet. In aller Regel ist es jedoch sinnvoll, sie explizit zu übergeben, statt sich auf den Zufall zu verlassen.
Lo!
Ich komme einfach nicht drauf:
$eintragvorhanden = mysql_query("SELECT title,id FROM table WHERE table.title = ".$title." AND table.id = ".$_POST['eingabe'].";");
if(mysql_num_rows($eingabevorhanden)==0){
$control4 = 0;
}else{
$control4 = 1;
$error5 = 'bereits vorhanden!';
}
mysql_error() liefert mir dass hier:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND table.id = 1' at line 1
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
Das $_POST['eingabe'] ist ein value von einem <select> und übergibt die id.
Sieht jemand was daran falsch sein soll?
Hi!
$eintragvorhanden = mysql_query("SELECT title,id FROM table WHERE table.title = ".$title." AND table.id = ".$_POST['eingabe'].";");
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND table.id = 1' at line 1
Wie lautet das vollständige SQL-Statement? Bau es zunächst in einer eigenen Variable zusammen, die du zur Kontrolle ausgeben kannst. Und beachte bitte alle Hinweise zum sicheren Programmieren.
Lo!
Vielleicht ist das Datenbank Feld id ein char oder varchar. Dann musst du Anführungszeichen hinzufügen. Das würde theoretisch auch bei table.title fehlen.
Ansonsten bin ich immer noch dafür dass du die MySQL Handler direkt übergibst.
Gruß
immer wieder helfender
T-Rex
Hi,
Leider bekomme ich immer diesen Error:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
Kann mir jemand weiter helfen?
Verstehst du die Fehlermeldung nicht, oder wo liegt das Problem?
Lies die Beschreibung von mysql im Handbuch, insb. hinsichtlich dessen, was der Rückgabewert aussagt.
Und dann, mache dich mit mysql_error vertraut.
MfG ChrisB
Hi!
Ich fange einen Formulareintrag ab:
$xy = $_POST['xy'];
Die müssen nicht "abgefangen" werden. POST- und GET-Werte können auch direkt aus den Arrays $_POST und $_GET genommen werden, ohne dass eine weitere Variable dafür erwendet werden muss.
$eintragvorhanden = mysql_query("SELECT id FROM table WHERE table.name = ".$xy.";");
Allerdings muss der Kontextwechsel beachtet werden, egal welche Werte du in eine Query einfügst, sonst gibt es das gesamte Spektrum zwischen Syntaxfehler bis SQL-Injection an Problemen.
Und dann ist es sehr sinnvoll, sich mit Fehlerbehandlung zu beschäftigen. Die benötigt man, um robuste Scripte zu erstellen, die nicht nur schon bei selbst verschuldeten Fehlern mit wenig nachvollziehbaren Folgefehlern aussteigen.
if(mysql_num_rows($titlevorhanden)==0){
Wenn du nur eine Anzahl benötigst, dann musst du nicht sämtliche Daten abfragen. mysql_query() macht im Hintergrund einen vollständigen Fetch-Vorgang vom Server zum Client, so dass Funktionen wie mysql_num_rows() überhaupt ein Ergebnis liefern können.
Desweiteren willst du doch sicher im Falle dass der Eintrag noch nicht besteht, selbigen erzeugen, oder? Dann wäre ein ganz anderes Vorgehen sinnvoller, denn zwischen der Abfrage und dem Eintragen können andere parallel laufende Operationen dies bereits vorgenommen haben. Um das zu umgehen macht man besser ohne vorherige Prüfung einen Eintragsversuch. Für die Werte, die nicht doppelt vorkommen dürfen, legt man einen Unique-Index an. Der führt dazu, dass bei bereits vorhandenem Eintrag der Eintragsversuch eine Unique-Constraint-Verletzung meldet. Auf diese Fehlermeldung muss man vorbereitet sein. Wenn sie eintritt, kannst du dich beim Eintragenden beschweren, wenn nicht, ist alles bestens und es gibt nun den Datensatz.
Lo!