Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询mysql,这是一个显示特定记录的简单方法_Php_Mysql - Fatal编程技术网

Php 查询mysql,这是一个显示特定记录的简单方法

Php 查询mysql,这是一个显示特定记录的简单方法,php,mysql,Php,Mysql,我有一个简单的房地产清单数据库。我试图做一个非常简单的搜索来显示记录。例如物业位置、类型和价格。我对select语句有问题,尤其是当用户提交空白字段时。参见代码。有更好的方法吗?我对使用while循环显示记录的位没有问题。我是一个新手,我相信你会知道的 <form action="search.php" method="post"> <table border="0" cellpadding="10" cellspacing="0"> <tr> <td

我有一个简单的房地产清单数据库。我试图做一个非常简单的搜索来显示记录。例如物业位置、类型和价格。我对select语句有问题,尤其是当用户提交空白字段时。参见代码。有更好的方法吗?我对使用while循环显示记录的位没有问题。我是一个新手,我相信你会知道的

<form action="search.php" method="post">

<table border="0" cellpadding="10" cellspacing="0">
<tr>
<td width="300"><b>Reference No</b></td>
<td><input type="text" name="Reference_No" maxlength="20" id="Reference_No" /></td>
</tr>

<tr>
<td><b>Property Name</b></td>
<td><input type="text" name="Property_Name" maxlength="30" id="Property_Name" /></td>
</tr>

<tr>
<td><b>Property Area</b></td>
<td>
<select name="Property_Area" id="Property_Area">
<option value="Ortaca">Ortaca</option>
<option value="Sarigerme">Sarigerme</option>
<option value="Other">Other</option>
</select>
</td>
</tr>

<tr>
<td><b>Property Type</b></td>
<td><select name="Property_Type" id="Property_Type">
<option value="Apartment">Apartment</option>
<option value="Land">Land</option>
<option value="Commercial Property">Commercial Property</option>
</select></td>
</tr>

<tr>
<td></td>
<td>
<input class="formsubmit" type="submit" value="Submit Enquiry" name="Submit" />
</td>
</tr>
</table>

</form>

$Reference_No = $_POST['Reference_No'];
$Property_Name = $_POST['Property_Name'];
$Property_Area = $_POST['Property_Area'];
$Property_Type = $_POST['Property_Type'];



$query = "SELECT * FROM properties WHERE (Live = 'yes' AND Property_Type = '$Property_Type') AND (Reference_No = '$Reference_No' OR Property_Name = '$Property_Name' OR Property_Area = '$Property_Area') ORDER BY Property_Area, Property_Price";

参考号
属性名
物业面积
奥塔卡
萨里格姆
其他
属性类型
公寓
土地
商业地产
$Reference\u No=$\u POST['Reference\u No'];
$Property\u Name=$\u POST['Property\u Name'];
$Property\u Area=$\u POST['Property\u Area'];
$Property\u Type=$\u POST['Property\u Type'];
$query=“从属性中选择*,其中(Live='yes'和属性类型='$Property\'Type')和(Reference\'No='$REFENCE\'No'或属性名称='$Property\'Name'或属性面积='$Property\'Area')按属性面积、属性价格排序”;

如果我理解正确,您希望在未选择任何内容的情况下获取所有属性,并限制用户选择

在SQL Server上,可以通过以下方式使用intersect:

$filters[] = "SELECT * FROM properties"
if ($Property_Type)
    $filters[] = "SELECT * FROM properties WHERE Property_Type = '$Property_Type'";
if ($Reference_No)
    $filters[] = "SELECT * FROM properties WHERE Reference_No = '$Reference_No'";
if ($Property_Name)
    $filters[] = "SELECT * FROM properties WHERE Property_Name = '$Property_Name'";
if ($Property_Area)
    $filters[] = "SELECT * FROM properties WHERE Property_Area = '$Property_Area'";

$final_query = implode(' INTERSECT ', $filters)
但是MySQL不支持INTERSECT。在这种情况下,您可以将过滤器包裹在过滤器上。。。等

$sql = 'SELECT * FROM properties';
if ($Property_Type) 
    $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Type = '$Property_Type'";
if ($Reference_No) 
    $sql = "SELECT * FROM ({$sql}) AS Q WHERE Reference_No = '$Reference_No'";
if ($Property_Name) 
    $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Name = '$Property_Name'";
if ($Property_Area) 
    $sql = "SELECT * FROM ({$sql}) AS Q WHERE Property_Area = '$Property_Area'";

是的,在将所有值插入查询字符串之前,不要忘记对其进行转义/清理,或者使用参数化查询PDO或MySqli样式。

是否有错误?错误消息是什么?我没有得到任何错误,但是有没有更好的方法来做到这一点,特别是多个或语句似乎也不起作用如果属性区域留空,但选择了land,我什么也得不到,因为空字段阻止它起作用。您需要了解SQL注入攻击。我在脚本中发布的任何内容都会直接插入到查询中,非常危险。与mysqli或PDO一起使用参数绑定!