[英]Laravel query builder returning empty where direct SQL returns results
[英]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查询或其他地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.