我使用此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或其他方法?
答案 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查询或其他位置之前验证所有用户输入。