這裏另一個MySQL變種:
SELECT *
FROM tbl
WHERE
IF($pid > 0, pid = $pid, 1 = 1)
AND IF($qid > 0, qid = $qid, 1 = 1)
AND IF($text > '', `text` = $text, 1 = 1)
;
但在這裏硬編碼值。而且,您不能選擇pid或qid恰好等於0或行數等於''(空字符串)的行。
你可以接收查詢,將在你的表中選擇所有行,我想這將是非常糟糕......
PHP的:
<?php
$dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root');
$pid = 1;
$qid = 2;
$text = '3';
$sql = 'SELECT * FROM tbl WHERE 1 = 1';
$params = [];
if (isset($pid)) {
$sql .= ' AND pid = :pid';
$params[':pid'] = $pid;
}
if (isset($qid)) {
$sql .= ' AND qid = :qid';
$params[':qid'] = $qid;
}
if (isset($text)) {
$sql .= ' AND `text` = :text';
$params[':text'] = $text;
}
$sth = $dbh->prepare($sql);
$sth->execute($params);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
var_export($result);
使用'if' /'之開關在PHP 。 –
查看@GordonLinoff的答案,注意你的代碼是打開的SQL注入看看準備好的語句。 – Daan
這是個壞主意,因爲,如果所有的參數都爲空,你會收到可怕的查詢,將選擇所有記錄... –