1

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

我需要检查“电子邮件”列是否包含有人试图注册的电子邮件,如果存在,则什么都不做,但是,如果不存在,则将数据插入数据库。

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

我正在使用 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 . '"');
}
4

5 回答 5

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

它更干净一些,并且在你的功能中

于 2013-01-08T23:16:33.713 回答
3

好像您没有连接到数据库。你在 R::find() 之前做过 R::setup() 吗?

如果 RedBeanPHP 找不到 R::$redbean 实例,它会引发此错误,外观静态函数只是将调用路由到 $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 方法。

于 2012-03-21T10:26:21.110 回答
0

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

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

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

作为一个起点,看看它在 rb.php 的第 2433 行试图做什么。它似乎正在对无效对象调用方法。找出创建该对象的位置以及它为什么无效。也许find函数提供了错误的参数。

随意通过find()在 rb.php 中粘贴整个函数来更新您的问题,并请指出哪一行是 2433。如果函数太长,您可以将其粘贴到 pastebin.com 之类的网站上并从此处链接到它。

于 2011-10-14T08:28:58.027 回答
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);
}
于 2012-09-28T10:58:08.463 回答
-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,这样,如果在第一条记录中找到它,您的查询将停止。

希望这可以帮助

于 2011-10-14T08:34:37.027 回答