【问题标题】:Check if an existing value is in a database检查现有值是否在数据库中
【发布时间】:2026-02-10 11:45:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这是正确的代码行吗?您的错误消息抱怨一个名为 find() 的函数,而您粘贴的代码有 findOne()。另外,您是否在脚本中包含 rb.php(或任何称为 RedBean 文件的文件)?
  • 我一定用过R::find('users'),但两者都返回相同的错误,只是函数名称不同。

标签: orm redbean


【解决方案1】:

我对函数的处理方法是

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

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

【讨论】:

    【解决方案2】:

    好像您没有连接到数据库。 你在 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 方法。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

        您的错误听起来好像您还没有完成 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);
        }
        

        【讨论】:

          【解决方案5】:

          我不知道这是否是基本的,但是使用 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,这样,如果在第一条记录中找到它,您的查询将停止。

          希望对你有帮助

          【讨论】: