2012-01-29 26 views
2

所以我试图在我的PHP代码中涉及一条if语句到我的SQL查询中。基本上,我想说“如果$ var不是0,添加WHERE子句,但是如果$ var是0,请不要添加它”。如果在SQL查询语句中为PHP

下面的代码,似乎没有工作。非常感谢帮助!

$var = $_GET["var"]; 

$query = sprintf("SELECT * FROM table ".if($var != 0) { echo "WHERE var = '%s'," }." 
    if($var != 0) { mysql_real_escape_string($var) }); 

$result = mysql_query($query); 

更新

我最终决定,因为我将使用多个变量多个条件,这是最好做到以下几点:

$var = $_GET["var"]; 
$string =''; 
if ($var != 0) { 
    $string = "WHERE var =". $var . " "; 
} 

$query = sprintf("SELECT * FROM table ". $string."); 

$result = mysql_query($query); 

现在我可以使用尽可能多的变量,并添加额外的子句到SQL语句。

感谢您的帮助!

回答

4

你不能有字符串连接内的if表达。此外,你错过了尾随"

$query = sprintf("SELECT * FROM table ". $var != 0 ? "WHERE var = '%s'" : ""); 

此外,mysql_real_escape_string()并不需要通过引用变量,因此返回修改后的字符串:

if($var != 0) { $var = mysql_real_escape_string($var) }); 
2

试试这个:

$query = sprintf("SELECT * FROM table%s", $var != 0 ? " WHERE var = '" . mysql_real_escape_string($var) . "'" : ""); 
2

不要使用PHP这一点;使用数据库。

$db = new PDO($dsn, $username, $password, $database); 
$stmt = $db->prepare('SELECT * FROM table WHERE (:select <> 0 AND column = :value)'); 
$stmt->execute(array(':select' => $var, ':value' => $var)); 
+0

这是一个完全MySQL的方式。您能否评论一下它可能产生的一个例子结果?我想了解这个查询。谢谢 – 2012-01-29 22:44:08

+1

这取决于你拥有的数据:那个查询告诉数据库只收集'column'和'$ value'完全相同并且用户指定的参数不等于零的行。关键是数据库不仅仅是一个用于存储数据的巨大散列表;他们也能够非常有效地过滤和处理海量数据 - 比PHP更具有优势。 – jmkeyes 2012-01-30 02:34:59

0
$var = $_GET["var"]; 
$string =''; 
if ($var != 0) { 
    $string = "WHERE var =". $var . " "; 
} 

$query = sprintf("SELECT * FROM table ". $string."); 

$result = mysql_query($query);