2017-07-16 6 views
-1

Ich versuche, Daten aus meiner Datenbank zurückzugeben. Die Abfrage gibt eine Null oder Eins zurück. Wenn die Daten eins zurückgeben (if psv1=1), möchte ich 'Daten gefunden' zurückgeben. Wenn die Daten eine Null zurückgeben (if psv1=0), möchte ich "Keine Daten gefunden" ausgeben.Skriptaufrufe Falsches Echo

Wenn ich mein Skript ausführen, bekomme ich immer 'Keine Daten gefunden', auch wenn psv1=1. Ich habe auch versucht, $res[0] == 1 zu $res[0] > 0 zu ändern, aber es hat nicht funktioniert.

$result = mysqli_query($db_handle, 'SELECT psv1 FROM cus WHERE id="1" AND user_id="'. $_SESSION['user_id'] .'"'); 
$res = mysqli_fetch_row($result); 

if ($res[0] == 1){ 
    echo 'Data found'; 
} 
else 
{ 
echo "No data found"; 
} 
+2

Sie erkennen, dass Sie die Daten holen müssen, bevor Sie vergleiche es, oder? –

+1

Sie vergleichen nicht 'psv1' Sie vergleichen Anzahl der Zeilen –

+0

Sie haben Recht. Ich habe es geändert. Aber jetzt bekomme ich immer "Keine Daten gefunden" – John

Antwort

0

Nach der Manual, mysqli_fetch_row() gibt NULL zurück, im Fehlerfall oder auch eine Reihe von Zeichenfolgen zu einer Reihe von Daten als ein numerisches Array entspricht. Ich empfehle auch zu testen, dass mysqli_query() nicht FALSE gemäß der Empfehlung des Handbuchs durch zahlreiche Beispiele here zurückgibt. So würde ein besserer Test so etwas wie die folgenden mit $ query codieren sein zu müssen auf die spezifische Abfrage gesetzt:

<?php 

$result = null; 
$res = null; 

$result = mysqli_query($db_handle, $query) OR die(mysqli_error($db_handle)); 

if(($res = mysqli_fetch_row($result)) === NULL) { 
    // Nothing to fetch 
}   
else 
{ 
    echo ($res[0] == 1)? "Data found." : "No data found"; 
} 
+0

Warum wird 'foreach' benötigt, wenn die Abfrage für' id' und 'user_id' ausgelöst wird? Außerdem, warum redundant wenn-sonst. Es kann leicht vermieden werden. –

+0

Dude, machst du Witze .. In diesem Fall sollten Sie auch überprüfen, $ _SESSION ['user_id'] 'Variable ist' not-a-string' und ist eine positive ganze Zahl und ist mit der Länge <10, etc. Wenn diese Überprüfungen werden nicht getroffen, warum feuern sogar eine Frage, richtig? –

0

Ich frage mich, ob Sie beide Bedingungen in der WHERE müssen. Willst du ID und user_id haben? Vorschlagen Entfernen:

Kann nur eine Vermutung sein, aber scheint unwahrscheinlich Zustand.

Auf keine Ergebnisse zurückgegeben Überprüfung kann ich schlage vor, versucht:

$result = mysqli_query($db_handle, 'SELECT psv1 FROM cus WHERE id="1" 
AND user_id="'. $_SESSION['user_id'] .'"'); 

$res = mysqli_fetch_row($result); 

if(mysqli_num_rows($result) > 0){ 

echo 'Data found'; 

} 

else { 

echo "No data found"; 

} 

See related SO answer on mysqli_num_rows

0

Sie mysqli_fetch_array($result, MYSQLI_ASSOC) verwenden sollten:

$result = mysqli_query($db_handle, 'SELECT psv1 FROM cus WHERE id="1" AND user_id="'. $_SESSION['user_id'] .'"'); 
$res = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if ($res['psv1'] == 1){ 
    echo 'Data found'; 
} 
else { 
    echo "No data found"; 
} 
+0

@ slevy1 - Bitte erläutern. –

+0

Nun, das Ziel ist es zu überprüfen, ob der 'psv1' Wert == 1 hat oder nicht. Anstatt nach NULL oder ZERO oder irgendetwas zu suchen, sollten wir einfach nach 1 suchen. –

+0

Okay, ich habe es aktualisiert. Und zweitens, wenn die Abfrage fehlschlägt, sollte es eher eine Ausnahme sein und/oder sollte von dem Framework behandelt werden. Eher "Versuch-Fang" dafür haben. Man kann nicht wirklich nach jeder Abfrage in der Anwendung suchen, die er erstellt. Es sollte einen Abfrage-Wrapper geben, der im Idealfall jedes Framework hat. Daher macht diese Überprüfung keinen Sinn. –