Php 未找到返回行的查询

Php 未找到返回行的查询,php,mysql,Php,Mysql,我用PHP开发了表单来搜索MySQL数据库,但是无论我如何尝试,它仍然无法检索任何结果。我在下面的代码中找不到任何语法错误或其他类似问题 <?php $txtkv=$_POST['txtkv']; $cbgen=$_POST['txtgenerator']; $cbinsulation=$_POST['txtinsulation']; $cbclass=$_POST['txtclass']; $cbairinlet=$_POST['txtai

我用PHP开发了表单来搜索MySQL数据库,但是无论我如何尝试,它仍然无法检索任何结果。我在下面的代码中找不到任何语法错误或其他类似问题

    <?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不像前面那样是空的。但是没有显示结果,它甚至没有像以前那样说没有行