检查数据库中是否存在现有值

时间:2011-10-14 08:21:33

标签: orm redbean

我想知道如何检查某个表是否包含某列中的值。

我需要检查列'电子邮件'是否包含某人试图注册的电子邮件,如果存在,则不执行任何操作,但是,如果不存在,请将数据插入数据库。

我需要做的就是检查电子邮件列是否包含用户注册的值。

我正在使用RedBeanPHP ORM,我可以在不使用它的情况下执行此操作,但我需要将其用于程序指南。

我已经尝试找到它们,但如果它们不存在,则会在redbean PHP文件中返回错误。这是错误:
Fatal error: Call to a member function find() on a non-object in /home/aeterna/www/user/rb.php on line 2433

这是我在尝试时使用的代码:

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

5 个答案:

答案 0 :(得分:4)

我对函数的处理方法是

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

它更干净,功能更强大

答案 1 :(得分:3)

好像你没有连接到数据库。 你在R :: find()之前完成了R :: setup()吗?

RedBeanPHP如果找不到R :: $ redbean实例就会引发此错误,facade静态函数只是将调用路由到$ redbean对象(隐藏所有不喜欢那种对象的人的面向对象的模糊性的东西)。

但是你需要使用R :: setup()来引导外观。通常你可以用两行来开始使用RB:

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( ... );

我建议检查$ redbean对象是否可用,或者由于某种原因代码流是否跳过了R :: setup()boostrap方法。

答案 2 :(得分:0)

编辑以说明您更新的问题:

根据错误消息,错误发生在第2433行rb.php中的函数find()内。我猜测rb.php是RedBean包。

请确保您已在脚本中包含rb.php,并根据 RedBean Manual 中的说明设置数据库。

作为一个起点,看看它在rb.php的第2433行尝试做什么。它似乎是在无效对象上调用方法。弄清楚该对象的创建位置及其无效原因。也许 find 函数提供了错误的参数。

您可以通过粘贴rb.php中的find()函数来更新您的问题,并指出哪一行是2433.如果函数太长,您可以将其粘贴到像pastebin这样的网站上。 com并从这里链接到它。

答案 3 :(得分:0)

你的错误听起来还没有完成R :: setup()。

我执行您想要的检查的方法是这样的:

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

答案 4 :(得分:-1)

我不知道它是否是基本的,但是使用SQL(使用PHP作为变量),查询可能看起来像

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

如果您只是想在数据库中查找单个值,则应始终将结果限制为1,这样,如果在第一条记录中找到,则查询将停止。

希望这有帮助