2010-12-01 6 views
1

Bonjour, je suis novice en PHP et j'apprécierais vraiment que quelqu'un puisse me dire où je me trompe dans ce code. Pour mettre le code en contexte, j'utilise le facebook pour authentifier les utilisateurs et ajouter leurs détails d'inscription à ma base de données d'applications. Dans le code suivant l'intention de vérifier si l'utilisateur existe déjà dans la base de données et si non les ajouter. Pour une raison quelconque, je ne peux pas tester la $resultTest si une requête Select a trouvé des résultats

J'ai vérifié les variables de requête et ils font écho sans problème

@ $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); 
} 

Je devrais probablement ajouter que j'ai le code de travail en utilisant l'approche plus mysql . Mais j'ai lu qu'il vaut mieux utiliser l'approche mysqli orientée objet.

est ici l'ancien code de travail

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); 
} 

} 

Toute aide que vous pouvez me donner est apprécié.

+1

si ($ result === FAUX) { pourrait devenir si (! $ result) { – benhowdle89

+0

si ($ result -> num_rows() == 0) devrait fonctionner. – Gazler

Répondre

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

rupture vers le bas:

$result instanceof mysqli_result 

c'est de s'assurer que la requête va t hrough et les résultats retour

$result->num_rows==0 

est de vérifier la requête précédente correspondant à tous les enregistrements existants

+0

Merci d'avoir pris le temps d'expliquer. Cela fonctionne parfaitement. – willmcneilly

2

Utilisez le MySQLi_Result::num_rows property pour obtenir le nombre de lignes d'une MySQLi_Result object:

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

@Charlie Pigarelli: willmcneilly tente de porter l'ancien code de procédure vers le code orienté objet MySQLi. Et 'MySQLi_Result :: num_rows' est toujours un nombre. – Gumbo

+0

Juste, je n'ai pas remarqué le premier code: la navigation par téléphone mobile. – Shoe

2

Il peut se faire aussi simple que:

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

Cela ne semble pas fonctionner car $ resultat semble revenir vrai, peu importe s'il trouve un enregistrement ou non – willmcneilly

Questions connexes