2012-06-19 2 views
-1

Я разработал форму в 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); 
    ?> 
+1

печати тонированное запрос на экран, копировать/вставить в MySQL и посмотреть, что результаты. Отлаживаем там, чтобы изолировать проблему –

+0

MySQL отображает результаты без проблем вообще – Yoosuf

+0

Итак, отлаживайте свой скрипт. Распечатайте соответствующие переменные после запроса типа 'var_dump (mysql_num_rows ($ result))', 'var_dump (mysql_fetch_row ($ result))' –

ответ

0

Что вы ожидаете в результате, вы, кажется, есть много условий там. Формы поиска должны предоставлять пользователю множество критериев, но использовать их только в том случае, если пользователь предоставил что-то.

Например, вместо того, чтобы использовать все условия сразу в одном большом запросе, сделайте следующее:

$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()); 

Это создаст полный запрос с только критериями, которые вам нужны. Обратите внимание, что наверху мы создаем массив критериев, а затем заполняем его всеми критериями по мере продвижения. Мы также берем время, чтобы убежать от них, чтобы обеспечить наш вход, который я не видел в исходном запросе.

Затем, используя IMPLODE, мы собираем все элементы вместе между символами AND для создания списка критериев. «1 = 1» используется для предотвращения пустого предложения WHERE в случае отсутствия критериев, но во всех случаях 1 = 1 всегда истинно, поэтому он не будет фильтровать что-либо.

Я надеюсь, что это помогает, и я надеюсь, что это действительно ваша проблема ...

Успехов

+0

Ну теперь $ результат возвращается после того, как mysql_query() не выглядит пустым, как раньше. Однако результаты не отображаются, он даже не говорит «Нет строк», как ранее – Yoosuf

Смежные вопросы