2010-12-01 3 views
1

Hallo ich bin neu in PHP und würde es sehr schätzen, wenn mir jemand sagen könnte, wo ich in diesem Code falsch liege. Um den Code in Kontext zu setzen, verwende ich Facebook, um Benutzer zu authentifizieren und ihre Anmeldeinformationen in meine App-Datenbank einzufügen. Im folgenden Code soll überprüft werden, ob der Benutzer bereits in der Datenbank vorhanden ist und sie nicht hinzufügen. Aus irgendeinem Grund kann ich nicht testen $resultTesten, ob eine Select Query Ergebnisse gefunden hat

ich die Query-Variablen überprüft haben und sie Echo aus, ohne ein Problem

@ $con = new mysqli('localhost', 'username', 'password', 'database'); 
if(mysqli_connect_errno()){ 
    echo 'Error: Could not connect to the database. Please try again later'; 
    exit; 
} 

$query = "SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid ='".$uid."'"; 

$result = $con->query($query); 


if($result === FALSE){ 
    $insertquery = "INSERT INTO ('oauth_provider', 'oauth_uid', 'username') VALUES ('facebook', '".$uid."', '".$username."')"; 
    $result = $con->query($query); 
} 

Ich sollte wahrscheinlich füge ich den Code haben arbeiten, um die älteren MySQL-Ansatz . Aber ich habe gelesen, dass es besser ist, den objektorientierten mysqli-Ansatz zu verwenden.

Hier ist das alte Arbeits Code

if($session){ 
$con = mysql_connect('localhost', 'user', 'password'); 
$select_db = mysql_select_db('database'); 

if(!$con || !$select_db){ 
    die('Could not connect: ' . mysql_error()); 
} 
else{ 
    echo "connected to database and table selected"; 
} 

$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user['id']); 
$result = mysql_fetch_array($query); 

if(empty($result)){ 
    $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user['id']}, '{$user['name']}')"); 
    $query = mysql_query("SELECT * FROM users WHERE id = " . mysql_insert_id()); 
    $result = mysql_fetch_array($query); 
} 

} 

Jede Hilfe Sie mich geschätzt geben kann.

+1

if ($ result === FALSCH) { könnte werden if (! $ result) { – benhowdle89

+0

if ($ Ergebnis zu überprüfen -> num_rows() == 0) sollte funktionieren. – Gazler

Antwort

1
if($result instanceof mysqli_result && $result->num_rows==0) 

Bruchs:

$result instanceof mysqli_result 

Dies ist sicherzustellen, Abfrage go t urch und Ergebnisse zurück

$result->num_rows==0 

dies ist die vorherige Abfrage passende alle vorhandenen Datensätze

+0

Danke, dass Sie sich die Zeit nehmen zu erklären. Es funktioniert perfekt. – willmcneilly

2

Verwenden Sie die MySQLi_Result::num_rows property die Anzahl der Zeilen eines MySQLi_Result object zu erhalten:

if ($result->num_rows > 0) { 
    // … 
} 
+0

@Charlie Pigarelli: willmcneilly versucht, den alten prozeduralen Code in den objektorientierten MySQLi-Code zu portieren. Und 'MySQLi_Result :: num_rows' ist immer eine Zahl. – Gumbo

+0

Richtig, ich habe den ersten Code nicht bemerkt: Surfen mit dem Handy. – Shoe

2

es so einfach getan werden kann als:

if($result) 
{ 
// Do code when there are results 
} else { 
// Do code when there are no results 
} 
+0

Dies scheint nicht zu funktionieren, da $ result scheint wieder als wahr zurückzukommen, egal ob es einen Rekord findet oder nicht – willmcneilly

Verwandte Themen