Проверьте, есть ли существующее значение в базе данных - PullRequest
1 голос
/ 14 октября 2011

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

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

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

Я использую 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 . '"');
}

Ответы [ 5 ]

4 голосов
/ 09 января 2013

Мой подход к функции был бы

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

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

3 голосов
/ 21 марта 2012

Похоже, вы не подключены к базе данных. Вы сделали 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 ().

0 голосов
/ 28 сентября 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);
}
0 голосов
/ 14 октября 2011

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

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

0 голосов
/ 14 октября 2011

Изменено для ответа на ваш обновленный вопрос:

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

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

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

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

...