我知道这在某种程度上是一个愚蠢的问题,我已经知道解决它的一个选择,但仍然如此。我有一个数据库和一个搜索表单。我想要完成的是过滤行特定于用户发送给我的VIA帖子。我知道如何获取POST到我的php变量,我现在想要完成的是仅在它不为空时才使用变量作为标准。所以有一些>
SELECT * FROM db
WHERE COL1=ifnotnull($variable from post form)
AND COL@ = ifnotnull($anothervariable)
.
.
.
所以我想在搜索中仅包含输入的表格中的文件(即非空)
我知道这可以通过预处理所有变量并检查它们是否为空,然后在SQL查询中不使用它们来完成,但是使用SQL动态执行此操作是否有更短的方法?
我希望我能彻底解释,
感谢。
答案 0 :(得分:0)
我认为预处理所有变量是最优选的方法。但这只是针对您的情况的棘手解决方案。 (使用 mysql用户定义的变量):
...
$dbh = new PDO(...); // a PDO instance representing a connection to a database
$var1 = 0; // sanitized variable from POST array
$var2 = "pen"; // sanitized variable from POST array
$dbh->exec("SET @var1 := $var1; ");
$dbh->exec("SET @var2 := '$var2'; ");
// replace 'id' and 'name' with your column names
$stmt = $dbh->prepare("SELECT * FROM table_name WHERE (id = @var1 OR @var1 = '') AND (name = @var2 OR @var2 = '') ");
$stmt->execute();
....
这种方法考虑了所有非空的传递变量