1

テーブルの特定の列に値が含まれているかどうかを確認する方法を知りたいと思っていました。

「e-mail」列に誰かが登録しようとしている電子メールが含まれているかどうかを確認する必要があります。何かが存在する場合は何もしませんが、何も存在しない場合はデータベースにデータを挿入します。

私がする必要があるのは、ユーザーが登録している値が電子メール列に含まれているかどうかを確認することだけです。

私は 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() を実行しましたか?

R::$redbean インスタンスが見つからない場合、RedBeanPHP はこのエラーを発生させます。ファサードの静的関数は呼び出しを $redbean オブジェクトにルーティングするだけです (そのようなことを好まない人のために、すべてのオブジェクト指向のあいまいさを隠すため)。

ただし、R::setup() を使用してファサードをブートストラップする必要があります。通常、次の 2 行だけで 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() ブースト トラップ メソッドをスキップしたかどうかを確認することをお勧めします。

于 2012-03-21T10:26:21.110 に答える
0

更新された質問を説明するために編集されました:

エラー メッセージによると、find()2433 行目の rb.php の関数内でエラーが発生しています。rb.php が RedBean パッケージであると推測しています。

RedBean マニュアルの指示に従って、スクリプトに rb.php が含まれていることを確認し、データベースをセットアップしてください。

出発点として、rb.php の 2433 行目で何をしようとしているのかを見てください。無効なオブジェクトでメソッドを呼び出しているようです。そのオブジェクトが作成されている場所と、それが無効である理由を突き止めます。おそらく、find関数に不適切なパラメーターが指定された可能性があります。

関数全体を rb.php に貼り付けて質問を更新してください。find()どの行が 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 に答える