如何使用WHERE子句中的变量的SQL SELECT查询(How to use variables

2019-09-27 17:36发布

我的SQL SELECT查询有3个变量由HTML表单设置,但这些变量可以为空:

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

当所有3个变量的形式进入了SELECT查询处理罚款(由于WHERE子句中的AND的)。 但是,当一个或多个变量为空,则SELECT查询错误,因为它是寻找在DATABSE 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 =“$郊区” AND cs.seekingAddressPostcode =“$邮编” 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;  

Answer 1:

构建您的查询的字符串,然后逐个增加一个,如果每场都有价值。 例如:

$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


Answer 2:

林不知道这是否是你想要做什么,但你尝试在这段代码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;


文章来源: How to use variables in WHERE clause for a SQL SELECT query