SQL查询'WHERE EXISTS'如果列返回空

时间:2015-04-28 19:10:14

标签: php mysql sql

我使用此sql查询作为PHP脚本的一部分来获取用户输入(应用于变量$ condition1- $ condition4)并将其与MySQL数据库进行比较并返回相关结果。

我的问题是,并非网站上的所有表单都输出$ condition4值,因此它并不总是输入到脚本/查询中。

我尝试在SQL查询中使用EXISTS谓词,但无法使其工作。

这是查询,因为我有它的工作:

 $sql = "SELECT columnXYZ
    FROM table_1
    WHERE condition1 = '" .$condition1."'
    and condition2 = '" .$condition2."'
    and condition3 = '" .$condition3."'
    and condition4 = '".$condition4."'";

我是否需要确定在运行查询之前是否输入了$ condition4,还是有办法使用WHERE EXISTS谓词来实现此目的?

整个脚本:( var_dump查看查询结果)

<?php
$condition1 = $_POST['condition1'];
$condition2 = $_POST['condition2'];
$condition3 = $_POST['condition3'];
$condition4 = $_POST['condition4'];
$dbhost = 'localhost';
$dbuser = 'admin';
$dbpass = 'pwd';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);

if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = "SELECT columnXYZ
        FROM table_1
        WHERE condition1 = '" .$condition1."'
        and condition2 = '" .$condition2."'
        and condition3 = '" .$condition3."'
        and condition4 = '".$condition4."'";

mysql_select_db('database_1');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    $columnXYZ = $row['columnXYZ'];
    var_dump($columnXYZ);   
} 



mysql_close($conn);
?>

当输入$ condition4时,查询工作正常,因为对于没有$ condition4的表单的解决方法我刚刚指向已移除$ condition4的类似php脚本。

澄清我的问题:我可以在SQL查询中使用EXISTS谓词来确定输入是否有值,或者我是否需要事先使用PHP或其他方法?

2 个答案:

答案 0 :(得分:4)

在将该部分添加到SQL查询之前,只需检查$ condition4是否为空()。

$sql = "SELECT columnXYZ
    FROM table_1
    WHERE condition1 = '" .$condition1."'
    and condition2 = '" .$condition2."'
    and condition3 = '" .$condition3."'";

if !(empty($condition4)){
    $sql .= "' and condition4 = '".$condition4."'";
}

正如Seth所提到的,google for&#39; SQL注入&#39;如果你打算将它放在公共互联网附近的任何地方。

答案 1 :(得分:1)

使用empty()进行检查时,$ condition4的值可能为null,因为empty允许NULL值。我还在学习PHP;但是,isset()会更好吗?否则可能有condition4 = null

此外,当该人对您的帖子发表评论时,请记住在将所有用户输入放入SQL查询或其他位置之前验证所有用户输入。

http://php.net/manual/en/function.isset.php