2011-10-14 2 views
0

Je me demandais comment j'allais vérifier si une table contenait une valeur dans une certaine colonne.Vérifiez si une valeur existante se trouve dans une base de données

Je dois vérifier si la colonne 'e-mail' contient un e-mail avec lequel quelqu'un essaie de s'inscrire, et si quelque chose existe, ne rien faire, cependant, si rien n'existe, insérer les données dans la base de données.

Tout ce que je dois faire est de vérifier si la colonne e-mail contient la valeur avec laquelle l'utilisateur s'enregistre. J'utilise l'ORM RedBeanPHP, je peux le faire sans l'utiliser mais je dois l'utiliser pour les directives du programme.

J'ai essayé de les trouver, mais si elles n'existent pas, il retourne une erreur dans le fichier PHP redbean. Voici l'erreur:
Fatal error: Call to a member function find() on a non-object in /home/aeterna/www/user/rb.php on line 2433

Voici le code que j'utilise lorsque vous essayez ceci:

function searchDatabase($email) { 
    return R::findOne('users', 'email LIKE "' . $email . '"'); 
} 
+0

Est-ce la bonne ligne de code? Votre message d'erreur se plaint d'une fonction appelée 'find()' alors que le code que vous avez collé a 'findOne()'. En outre, incluez-vous rb.php (ou quel que soit le nom du fichier RedBean) dans votre script? – Anson

+0

Je dois avoir utilisé 'R :: find ('users')' mais les deux retournent la même erreur, juste avec la différence de nom de la fonction. –

Répondre

0

modifié pour tenir compte de votre question mise à jour:

Selon le message d'erreur, l'erreur est passe à l'intérieur de la fonction find() dans rb.php sur la ligne 2433. Je devine que rb.php est le paquet RedBean.

Assurez-vous que vous avez inclus dans votre script rb.php et configurez votre base de données, selon les instructions du RedBean Manual. Pour commencer, regardez ce que vous essayez de faire à la ligne 2433 dans rb.php. Il semble appeler une méthode sur un objet invalide. Déterminez où cet objet est créé et pourquoi il est invalide. Peut-être que la fonction find a été fournie avec de mauvais paramètres. N'hésitez pas à mettre à jour votre question en collant l'intégralité de la fonction find() dans rb.php et indiquez la ligne 2433. Si la fonction est trop longue, vous pouvez la coller sur un site comme pastebin.com et un lien à partir d'ici.

+0

J'ai oublié de mentionner quelque chose dans mon message, je l'ai mis à jour. –

+0

Ok, j'ai besoin de voir le segment de code qui échoue. – Anson

+0

Mise à jour avec le code que j'ai essayé d'utiliser –

-1

Je ne sais pas si elle est cette base ou non, mais avec SQL (en utilisant PHP pour les variables), une requête pourrait ressembler

$lookup = 'customerID'; 
$result = mysql_fetch_array(mysql_query("SELECT columnName IN tableName WHERE id='".$lookup."' LIMIT 1")); 
$exists = is_null($result['columnName'])?false:true; 

Si vous êtes juste essayer de trouver une seule valeur dans une base de données, vous devriez toujours limiter votre résultat à 1, de cette façon, s'il se trouve dans le premier enregistrement, votre requête s'arrêtera.

Espérons que cela aide

3

On dirait que vous n'êtes pas connecté à une base de données. Avez-vous fait R :: setup() avant R :: find()? RedBeanPHP soulève cette erreur s'il ne trouve pas l'instance R :: $ redbean, les fonctions statiques de la façade acheminent simplement les appels à l'objet $ redbean (pour masquer toutes les erreurs orientées objet pour les personnes qui n'aiment pas ce genre de chose). Cependant, vous devez démarrer la façade en utilisant R :: setup().Normalement, vous pouvez commencer à utiliser RB avec seulement deux lignes:

require('rb.php'); //cant make this any simpler :(
R::setup(); //this could be done in rb.php but people would not like that ;) 

//and then go... 
R::find(...); 

Je recommande de vérifier si l'objet redbean de $ est disponible ou que ce soit pour une raison quelconque le flux de code a sauté la méthode boostrap R :: setup().

0

Votre erreur semble ne pas avoir déjà fait R :: setup().

Mon approche pour effectuer le contrôle que vous voulez serait quelque chose comme ceci:

$count = count(R::find('users', 'email LIKE :email', array(':email' => $email))); 
if($count === 0) 
{ 
    $user = R::dispense('users'); 
    $user->name = $name; 
    $user->email = $email; 
    $user->dob = $dob; 
    R::store($user); 
} 
3

Mon approche de la fonction serait

function searchDatabase($email) { 

    $data = array('email' => $email); 
    $user = R::findOne('users', 'email LIKE :email, $data); 

    if (!empty($user)) { 

      // do stuff here 

    } // end if 

} // end function 

Il est un peu plus propre et dans votre fonction

Questions connexes