2013-06-10 3 views
1

Мой SQL SELECT запрос имеет 3 переменные, заданные с помощью HTML-формы, однако эти переменные могут быть нулевым:Как использовать переменные в ИНЕКЕ для запроса SQL SELECT

$suburb = (isset($_POST['suburb'])) ? $_POST['suburb'] : ''; 
    $postcode = (isset($_POST['postcode'])) ? $_POST['postcode'] : ''; 
    $state = (isset($_POST['state'])) ? $_POST['state'] : ''; 

Когда все 3 переменные вводятся в сформируйте процессы SELECT запросов в порядке (из-за AND в предложении WHERE). Но когда одна или несколько переменных пусты, ошибки запроса SELECT, поскольку они ищут значение NULL в базе данных.

То, что я хочу, чтобы это сделать, когда переменная равна нулю, я не хочу, где положение для него

Запрос:

$sql = <<<SQL 
SELECT 
    cs.customerRefId, 
    cc.firstName, 
    cc.lastName, 
    cc.email, 
    cc.phone, 
    cc.mobile, 
    cs.seekingAddressSuburb, 
    cs.seekingAddressPostcode, 
    cs.seekingAddressState 
FROM 
    customer_seeking cs 
LEFT JOIN 
    customer_contact cc ON cc.customerRefId = cs.customerRefId 
WHERE 
cs.seekingAddressSuburb = '$suburb' AND 
cs.seekingAddressPostcode = '$postcode' AND 
cs.seekingAddressState = '$state' 
SQL; 


if(!$result = $db->query($sql)){ 
    die('There was an error running the query [' . $db->error . ']'); 
} 

Например, если только переменная состояния определена (cs.seekingAddressSuburb = «$ пригорода» И cs.seekingAddressPostcode = «$ почтового индекса» и удаляется из ИНЕК):

$sql = <<<SQL 
SELECT 
    cs.customerRefId, 
    cc.firstName, 
    cc.lastName, 
    cc.email, 
    cc.phone, 
    cc.mobile, 
    cs.seekingAddressSuburb, 
    cs.seekingAddressPostcode, 
    cs.seekingAddressState 
FROM 
    customer_seeking cs 
LEFT JOIN 
    customer_contact cc ON cc.customerRefId = cs.customerRefId 
WHERE 
cs.seekingAddressState = '$state' 
SQL; 
+0

проверки если пусто, если это так, не добавляйте и –

+0

Не лучше ли использовать инструкции if в запросе SQL? – DLO

+0

Вы должны использовать подготовленные инструкции, в противном случае вы уязвимы для SQL-инъекций, таких как передача в ''; drop table customer_seeking; '' for '$ state' – doublesharp

ответ

0

построить свой запрос в виде строки, то добавьте один за другим, если каждое поле имеет значение. Пример:

$query = "select * from table1 where 1=1"; 
if(!empty($suburb)) $query.=" and cs.seekingAddressSuburb = '$suburb'"; 
if(!empty($postcode)) $query.=" and cs.seekingAddressPostcode = '$postcode'"; 
if(!empty($state)) $query.=" and cs.seekingAddressState = '$state'"; 
//run your query then 
+3

Вы должны использовать 'pdo' или' mysqli' и использовать подготовленные операторы. –

0

Я не уверен, если это то, что вы хотите сделать, но попробовать этот код в PHP FIDDLE

$a = 'a'; 
$b = 'b'; 
$c; 

$SQL = "SELECT * FROM TABLE WHERE A = $a". (!empty($b) ? ' AND b ='. $b: '') ." ". (!empty($c) ? 'AND C ='. $c: ''); 

echo $SQL; 

соотносить В коде

$suburb = if(isset($_POST['suburb'])); 
$postcode = if(isset($_POST['postcode'])); 
$state = if(isset($_POST['state'])); 

$SQL = "SELECT cs.customerRefId, 
cc.firstName, 
cc.lastName, 
cc.email, 
cc.phone, 
cc.mobile, 
cs.seekingAddressSuburb, 
cs.seekingAddressPostcode, 
cs.seekingAddressState 
FROM 
    customer_seeking cs 
LEFT JOIN 
    customer_contact cc ON cc.customerRefId = cs.customerRefId WHERE cs.seekingAddressSuburb = $suburb". (!empty($postcode) ? ' AND cs.seekingAddressPostcode ='. $postcode: '') ." ". (!empty($state) ? 'AND cs.seekingAddressState ='. $state: ''); 

echo $SQL; 
+0

Этот вид кажется сработавшим, но если $ suburb пуст, появляется ошибка. Должен ли я добавить (! Empty ($ suburb)? »И cs.seekingAddressSuburb = '. $ Suburb:' ') – DLO

+0

да, вы можете попробовать и тот. просто убедитесь, что есть ** как минимум 1 ** переменная, которая имеет значение –

+0

Все 3 могут быть пустыми, хотя, как я могу это сделать? – DLO

Смежные вопросы