簡體   English   中英

如何在WHERE子句中使用變量進行SQL SELECT查詢

[英]How to use variables in WHERE clause for a SQL SELECT query

我的SQL SELECT查詢通過HTML表單設置了3個變量,但是這些變量可以為null:

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

當以表格形式輸入所有3個變量時,SELECT查詢將正常運行(由於WHERE子句中的AND)。 但是,當一個或多個變量為空時,SELECT查詢錯誤,因為它正在數據庫中尋找NULL值。

我想要它做的是當變量為null時,我不希望它有where子句

查詢:

$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 ='$ suburb'AND cs.seekingAddressPostcode ='$ postcode'AND並從WHERE子句中刪除):

$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;  

用字符串構造查詢,如果每個字段都有值,則一個一個地添加。 例如:

$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

我不確定這是否是您要執行的操作,但是您可以在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM