Проверить, находится ли существующее значение в базе данных

Мне было интересно, как я буду проверять, содержит ли таблица значение в определенном столбце.

Мне нужно проверить, содержит ли столбец «e-mail» адрес электронной почты, на который кто-то пытается зарегистрироваться, и, если что-то существует, ничего не делать, однако, если ничего не существует, вставьте данные в базу данных.

Все, что мне нужно сделать, это проверить, содержит ли столбец электронной почты значение, с которым регистрируется пользователь.

Я использую RedBeanPHP ORM, я могу сделать это без его использования, но мне нужно использовать его для руководства по программе.

Я пытался найти их, но если они не существуют, он возвращает ошибку в PHP-файле redbean. Вот ошибка:
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 . '"');
}

person Community    schedule 14.10.2011    source источник
comment
Это правильная строка кода? Ваше сообщение об ошибке жалуется на функцию с именем find(), в то время как код, который вы вставили, имеет findOne(). Кроме того, включаете ли вы rb.php (или как там называется файл RedBean) в свой скрипт?   -  person Anson    schedule 14.10.2011
comment
Должно быть, я использовал R::find('users'), но оба возвращают одну и ту же ошибку, только с разницей в имени функции.   -  person    schedule 14.10.2011


Ответы (5)


Отредактировано с учетом вашего обновленного вопроса:

Согласно сообщению об ошибке, ошибка происходит внутри функции find() в rb.php в строке 2433. Я предполагаю, что rb.php — это пакет RedBean.

Убедитесь, что вы включили rb.php в свой скрипт и настроили базу данных в соответствии с инструкциями в Руководство по RedBean.

В качестве отправной точки посмотрите, что он пытается сделать в строке 2433 в rb.php. Похоже, он вызывает метод для недопустимого объекта. Выясните, где создается этот объект и почему он недействителен. Возможно, функция find была указана с неверными параметрами.

Не стесняйтесь обновить свой вопрос, вставив всю функцию find() в rb.php и укажите, какая строка 2433. Если функция слишком длинная, вы можете вставить ее на сайт, например pastebin.com, и дать ссылку на нее отсюда. .

person Anson    schedule 14.10.2011

Мой подход к функции будет

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

Это немного чище и в вашей функции

person Eddie    schedule 08.01.2013

Похоже, вы не подключены к базе данных. Вы делали R::setup() перед R::find()?

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 или по какой-то причине поток кода пропустил метод boostrap R::setup().

person Gabor de Mooij    schedule 21.03.2012

Ваша ошибка звучит так, будто вы еще не выполнили 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);
}
person Rikki    schedule 28.09.2012

Я не знаю, является ли это базовым или нет, но с 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, таким образом, если оно будет найдено в первой записи, ваш запрос остановится.

Надеюсь это поможет

person Michael    schedule 14.10.2011