繁体   English   中英

如果列返回空,则SQL查询“ WHERE EXISTS”

[英]SQL Query 'WHERE EXISTS' if a column returns empty

我将此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或其他方法来做到这一点?

只需检查$ condition4是否为empty(),然后再将该部分添加到SQL查询中即可。

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

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

正如塞思(Seth)所提到的,如果您打算将它放置在公共互联网附近的任何地方,那么Google会使用“ SQL注入”。

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

另外,正如该人在您的帖子中发表的评论一样,请记住先验证所有用户输入,然后再将其放置在sql查询或其他地方。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM