Php 未找到返回行的查询
我用PHP开发了表单来搜索MySQL数据库,但是无论我如何尝试,它仍然无法检索任何结果。我在下面的代码中找不到任何语法错误或其他类似问题Php 未找到返回行的查询,php,mysql,Php,Mysql,我用PHP开发了表单来搜索MySQL数据库,但是无论我如何尝试,它仍然无法检索任何结果。我在下面的代码中找不到任何语法错误或其他类似问题 <?php $txtkv=$_POST['txtkv']; $cbgen=$_POST['txtgenerator']; $cbinsulation=$_POST['txtinsulation']; $cbclass=$_POST['txtclass']; $cbairinlet=$_POST['txtai
<?php
$txtkv=$_POST['txtkv'];
$cbgen=$_POST['txtgenerator'];
$cbinsulation=$_POST['txtinsulation'];
$cbclass=$_POST['txtclass'];
$cbairinlet=$_POST['txtairInlet'];
$cbip=$_POST['txtIp'];
// set database server access variables:
$host = "localhost";
$user = "root";
$pass = "";
$db = "nordhavn";
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
mysql_select_db($db) or die ("Unable to select database!");
$query="SELECT Scania.GensetType, Scania.EngineType, Scania.Engine60Hz, Scania.Alternator,NordhavnGenset.MaxKw, NordhavnGenset.MaxKva, Scania.PriceEur
FROM Scania
LEFT JOIN NordhavnGenset ON Scania.Alternator=NordhavnGenset.Alternator
LEFT JOIN Generator ON Generator.Alternator=Scania.Alternator
LEFT JOIN Insulation ON Insulation.Insulation=NordhavnGenset.Insulation
LEFT JOIN Klasse ON Klasse.Klasse=NordhavnGenset.Class
LEFT JOIN AirInletFilter ON AirInletFilter.AirInletFilter=NordhavnGenset.AirInletFilter
LEFT JOIN IP ON IP.IP=NordhavnGenset.Ip
WHERE (NordhavnGenset.MaxKva='".$txtkv."') and (Generator.Alternator='".$cbgen."') and (Insulation.Insulation='".$cbinsulation."') and (Klasse.Klasse='".$cbclass."') and (AirInletFilter.AirInletFilter='".$cbairinlet."') and (IP.IP='".$cbip."')";
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
$i = 0;
if (mysql_num_rows($result) > 0) {
echo "<table cellpadding=10 border=1>
<tr>
<td> Gense Type (Scania.GensetType) </td>
<td> Engine type (Scania.Enginetype) </td>
<td> Engine 60Hz (Scania.Engine60hz)</td>
<td> Alternator (Scania.Alternator and Genrator.Alternator) </td> <td> Max Kw (NordhavnGenset.MaxKw) </td>
<td> Max Kva (NordhavnGenset.MaxKva)</td>
<td> Price Euro (Scania.PriceEur) </td>
</tr>";
while(($row = mysql_fetch_row($result)) !== false) {
$i++;
echo "<tr class=\"d".($i & 1)."\">";
echo "<td>"."<center>".$row[1]."</center>"."</td>";
echo "<td>"."<center>".$row[2]."</center>"."</td>";
echo "<td>"."<center>".$row[3]."</center>"."</td>";
echo "<td>"."<center>".$row[4]."</center>"."</td>";
echo "<td>"."<center>".$row[5]."</center>"."</td>";
echo "<td>"."<center>".$row[6]."</center>"."</td>";
echo "<td>"."<center>".$row[7]."</center>"."</td>";
echo "<td>"."<center>".$row[8]."</center>"."</td>";
echo "<td>"."<center>".$row[9]."</center>"."</td>";
echo "<td>"."<center>".$row[10]."</center>"."</td>";
echo "<td>"."<center>".$row[11]."</center>"."</td>";
echo "</tr>";
}
echo "</table>";
}else {
echo "No rows found!";
}
mysql_free_result($result);
mysql_close($connection);
?>
您期望的结果是,您似乎有很多条件。搜索表单应该向用户提供许多标准,但只有在用户提供了一些东西时才使用它们
例如,不要在一个大查询中同时使用所有标准,请执行以下操作:
$criterias = array("1=1");
if(isset($_POST['txtkv'])){ $criterias[] = 'NordhavnGenset.MaxKva = "'.mysql_real_escape_string($_POST['txtkv']).'"'; }
if(isset($_POST['cbgen'])){ $criterias[] = 'Generator.Alternator = "'.mysql_real_escape_string($_POST['cbgen']).'"'; }
if(isset($_POST['cbinsulation'])){ $criterias[] = 'Insulation.Insulation = "'.mysql_real_escape_string($cbinsulation).'"'; }
if(isset($_POST['cbclass'])){ $criterias[] = 'Klasse.Klasse = "'.mysql_real_escape_string($cbclass).'"'; }
if(isset($_POST['cbairinlet'])){ $criterias[] = 'AirInletFilter.AirInletFilter = "'.mysql_real_escape_string($cbairinlet).'"'; }
if(isset($_POST['cbip'])){ $criterias[] = 'IP.IP = "'.mysql_real_escape_string($cbip).'"'; }
$query = "
SELECT
Scania.GensetType, Scania.EngineType, Scania.Engine60Hz,
Scania.Alternator,NordhavnGenset.MaxKw, NordhavnGenset.MaxKva,
Scania.PriceEur
FROM
Scania
LEFT JOIN NordhavnGenset ON Scania.Alternator = NordhavnGenset.Alternator
LEFT JOIN Generator ON Generator.Alternator = Scania.Alternator
LEFT JOIN Insulation ON Insulation.Insulation = NordhavnGenset.Insulation
LEFT JOIN Klasse ON Klasse.Klasse = NordhavnGenset.Class
LEFT JOIN AirInletFilter ON AirInletFilter.AirInletFilter = NordhavnGenset.AirInletFilter
LEFT JOIN IP ON IP.IP = NordhavnGenset.Ip
WHERE
".implode(' AND ', $criterias);
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
这将创建一个只包含所需标准的完整查询。请注意,在顶部,我们创建了一个标准数组,然后在运行时填充所有标准。我们还花时间逃离它们,以确保我在原始请求中没有看到的输入
然后,使用内爆,我们将AND之间的所有项整理在一起,以创建一个标准列表。“1=1”用于在没有提供标准的情况下防止WHERE子句为空,但在所有情况下1=1始终为真,因此它不会过滤掉任何内容
我希望这有帮助,我希望这真的是你的问题
祝您好运将呈现的查询打印到屏幕上,复制/粘贴到mysql中,然后查看结果。Debug here隔离问题MySQL显示结果完全没有问题,所以调试脚本。打印查询后的相关变量,如var\u dump(mysql\u num\u rows($result))
,var\u dump(mysql\u fetch\u row($result))
则mysql不会为您的查询返回任何数据。要么您选择了错误的数据库,要么您有不同的权限,要么您有其他原因。将查询复制/粘贴到mysql的目的是消除mysql作为故障点,因此您应该以相同的用户身份登录,选择相同的数据库,并运行完全相同的查询。我不是说从代码中复制/粘贴。。我的意思是放置类似于die($query)
的东西,并将其与所有呈现的变量一起复制/粘贴。很抱歉,您的意思是复制SQL查询,包括变量。我已经回显了PHP变量,发现它们根本不是空的。所以我猜结果也是一样的,因为变量没有受到影响,在mysql_query()之后返回的$result不像前面那样是空的。但是没有显示结果,它甚至没有像以前那样说没有行