Php使用WHERE

时间:2016-01-17 09:37:40

标签: php mysql

我知道这在某种程度上是一个愚蠢的问题,我已经知道解决它的一个选择,但仍然如此。我有一个数据库和一个搜索表单。我想要完成的是过滤行特定于用户发送给我的VIA帖子。我知道如何获取POST到我的php变量,我现在想要完成的是仅在它不为空时才使用变量作为标准。所以有一些>

SELECT * FROM db 
WHERE COL1=ifnotnull($variable from post form)
AND COL@ = ifnotnull($anothervariable)
.
.
.

所以我想在搜索中仅包含输入的表格中的文件(即非空)

我知道这可以通过预处理所有变量并检查它们是否为空,然后在SQL查询中不使用它们来完成,但是使用SQL动态执行此操作是否有更短的方法?

我希望我能彻底解释,

感谢。

1 个答案:

答案 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();
....

这种方法考虑了所有非空的传递变量