SOQL-запрос, сформулируйте запрос для более чем одного

Я делаю поле поиска в php для доступа к данным из базы данных SOQL salesforce. Пока у меня есть это:

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var'";

Что отлично работает. Однако как бы я сделал так, чтобы, скажем, $var могло быть номером телефона. Поэтому, если имя не совпадает с именем, найдите совпадение в номере телефона и т. Д.


person Stupid.Fat.Cat    schedule 20.07.2012    source источник


Ответы (2)


попробуй это:

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName LIKE '%$var%' OR Phone LIKE '%$var%'";

используя LIKE вместо =, вы можете сопоставить части имен, например, поиск dav приведет к возврату как Дэвида, так и Дэвса. % - это заполнители с подстановочными знаками.

person David Stetler    schedule 20.07.2012
comment
Я также согласен с сообщением Dreaded ниже, вы хотите очистить $ var, чтобы предотвратить SQL-инъекцию. Если это в закрытой интрасети, вам, возможно, не стоит об этом беспокоиться, но это хорошая практика. - person David Stetler; 20.07.2012
comment
отлично! Спасибо. У меня есть одна проблема с% $ var%, хотя даже когда он пуст, я получаю все результаты. Есть ли способ сказать, что var должен быть хотя бы не пустым? РЕДАКТИРОВАТЬ: На самом деле я столкнулся с другой проблемой. Когда я использую или не получаю результатов: S - person Stupid.Fat.Cat; 20.07.2012
comment
вам, вероятно, понадобится проверка javascript для этого, чтобы, если пользователь ничего не вводит, они получают предупреждение перед фактической отправкой данных на сервер. Проверьте это: w3schools.com/js/js_form_validation.asp - person David Stetler; 20.07.2012
comment
Да ладно, я это исправил. Оказывается, escape-строка mysql не работает. - person Stupid.Fat.Cat; 20.07.2012
comment
вам нужно подключиться к db перед вызовом escape-строки mysql. это важно для предотвращения легкого взлома вашей базы данных - person Dreaded semicolon; 20.07.2012
comment
Да, я понимаю, почему это важно, но по каким-либо причинам всякий раз, когда я использую функцию для $ var, запрос не работает. Я не уверен, что это потому, что я использую базу данных SOQL вместо MYSQL, но это так :( - person Stupid.Fat.Cat; 20.07.2012
comment
если вы не можете заставить это работать, используйте addlashes; $ var = добавляет косые черты ($ var); это решит большинство проблем, это не на 100% безопасно, но намного лучше, чем не делать этого. - person David Stetler; 20.07.2012
comment
Это также предотвратит любые проблемы при поиске имен, в которых есть апострофы. Я понимаю, что это не так много имен, к которым это применимо, но когда вы в конечном итоге расширите до фамилий, я уверен, что вы столкнетесь с этой проблемой. - person David Stetler; 20.07.2012
comment
Спасибо! Будем надеяться, что все будет хорошо. - person Stupid.Fat.Cat; 20.07.2012

Это должно проверить, есть ли совпадение в имени или нет совпадения в имени, но найти совпадение в телефоне

 $var=mysql_real_escape_string($var); //protect your sql entries from sql injection, make sure to validate
 $query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR (FirstName !='$var' AND Phone='$var') ";

Или, если вы не возражаете, если есть совпадение здесь или там, вы можете использовать or. что лучше с точки зрения производительности, чем предыдущий запрос

 $query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR Phone='$var' ";
person Dreaded semicolon    schedule 20.07.2012
comment
Спасибо за ответ. По каким-то непонятным причинам или не работает у меня. Если у меня есть только один элемент поиска, он работает, но если я использую два, он не работает. Я также убедился, что поле, которое я ищу, существует. - person Stupid.Fat.Cat; 20.07.2012
comment
Можете ли вы опубликовать пример $ var, который не работает, даже если он существует в db? = будет соответствовать точно, Like '%%' будет соответствовать с использованием wildcat. поэтому в приведенном выше ответе строка должна точно совпадать. если это abcd в базе данных, то соответствует только abcd, а не abcd с пробелом ни abc. также не забудьте проверить $var. если он пуст, то не ищите его. Например, $ var = trim ($ var); затем if (!empty($var)) - person Dreaded semicolon; 20.07.2012
comment
О, я нашел причину. использование реальной escape-строки mysql не сработало для запроса по некоторым причинам! Это потому, что я использую SOQL? - person Stupid.Fat.Cat; 20.07.2012