2016-03-30 28 views
0

Ich versuche zu überprüfen, ob Datensatz in SQL vorhanden ist und eine Rückgabe erhalten -> True oder False. Es gibt einen Hinweis: Hinweis: Der Versuch, Eigentum von Nicht-Objekt zu erhalten in .... if ($ result-> num_rows> 0)PHP überprüfen, ob Datensatz in SQL existiert

$connection = new mysqli('localhost', 'user', 'pass','db_name'); 
$query = "SELECT * FROM order WHERE telephone = '".$telephone."' AND order_status_id='0' "; 

$result = $connection->query($query); 
      if($result->num_rows > 0) { 
        echo 'found'; // The record(s) do exist 
       } 
      else{ 
        echo 'not found'; // No record found 
       } 

    $connection->close(); 
+0

geprüft, ob tatsächlich '$ result' Wert. Verwenden Sie 'print_r ($ result)', um den Wert zu überprüfen. – Yash

+2

'ORDER' ist ein mysql reserviertes Wort. –

+1

Ihre Abfrage schlägt fehl, da 'order' in' 'reserved keyword'' ist. Mysql muss in backtick sein. Https://dev.mysql.com/doc/refman/5.7/en/keywords.html – Saty

Antwort

-2

Es bei Abfrage geschieht Objekt nicht spritzt in Ihrer $result Variable. Sie können die folgenden Änderungen vornehmen, um fortzufahren.

if(is_object($result) && $result->num_rows > 0) { 
    echo 'found'; // The record(s) do exist 
} else{ 
    echo 'not found'; // No record found 
} 

ODER

if(!empty($result->num_rows)) { 
     echo 'found'; // The record(s) do exist 
    } else{ 
     echo 'not found'; // No record found 
    } 

Halten Sie auch die Sache einfach:

$query = "SELECT * FROM `order` WHERE telephone = '$telephone' AND order_status_id='0' "; 
+1

Ihre Abfrage schlägt fehl, weil die Reihenfolge Schlüsselwort reserviert ist und in Backtick sein muss – Saty

+0

Großartig! Du bist großartig! Kein Fehler, aber gibt nur das Ergebnis von ELSE zurück. Warum? – Danzell

+0

Sind Sie sicher, dass Ihr '$ result' die erwarteten Ergebnisse erzielt? Ich denke nicht, bitte teilen Sie Ihre '$ result' Inhalte? –

2

ORDER ein mysql reserved word ist. Mit ihm als Feldnamen, Tabellennamen oder was auch immer, außer ORDER BY fieldname erfordert Backticks:

SELECT * FROM `order` WHERE .... 

Andernfalls werden Sie eine Abfrage Fehlermeldung erhalten, die $result in boolean falsch verwandeln wird.

Auch Ihr Code ist anfällig für sql-injection. Ich rate Ihnen, vorbereitete Anweisungen zu verwenden.

+1

Als kleinen Tipp hinzufügen, wenn Sie noch "Reihenfolge" als Tabellenname verwenden möchten, aber nicht jedes Mal "entkommen" wollen, können Sie Namenskonvention und Benutzer Plural folgen: "Bestellungen" –

-3
Use like this 

$sqlReq = " SELECT * FROM order WHERE telephone = '".$telephone."' AND order_status_id='0' "; 

       $queryReq = mysql_query($sqlReq) or die(mysql_error()); 

       if(mysql_num_rows($queryReq) > 0) 
       { 
        echo "found"; 
       }else{ 
        echo "not found"; 
         } 
0

Sie überprüfen die Zeilen des Abfrageobjekts. Das Abfrageobjekt enthält die Zeilen nicht.

Was Sie tun möchten, ist so etwas wie

$data = $result->fetch_array(); 
if ($data->num_rows > 0) 
{ 
    //Rows exist 
} else { 
    //No rows exist 
} 
Verwandte Themen