2016-03-04 47 views
0

我在PHP这个功能:“对不起,似乎没有要任何结果”PDO SQL查询不能如预期运行

function getFilteredList($conn, $limit, $offset, $job_app, $Job_Type, $location) { 
    /* 
    <option value="0">Select category or Search all</option> 
    <option value="1">Business and Administration</option> 
    <option value="2">Education and Training</option> 
    <option value="3">Leisure, Travel and Tourism</option> 
    <option value="4">Information and Communication Technology</option> 
    */ 
    if($Job_Type == 1){ 
     $Job_Type2 = '%1%'; 
    }elseif($Job_Type == 2){ 
     $Job_Type2 = '%2%'; 
    }elseif($Job_Type == 3){ 
     $Job_Type2 = '%3%'; 
    }elseif($Job_Type == 4){ 
     $Job_Type2 = '%4%'; 
    } 
    $query = $conn->prepare("SELECT * FROM `jobs_current` WHERE `job_type` LIKE :job_type ORDER BY `jobs_current`.`job_comp_loc` ASC LIMIT :limit OFFSET :offset "); 
    $query->bindParam(':limit', $limit, PDO::PARAM_INT); 
    $query->bindParam(':offset', $offset, PDO::PARAM_INT); 
    $query->bindParam(':job_type', $Job_Type2, PDO::PARAM_STR); 
    $query->execute(); 

    $end = ""; 
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
    { 
     if($row['job_app'] == $job_app){ 
      $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
      $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
      $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
     }else if($job_app == 0){ 
      $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
      $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
      $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
     }else{ 
      return '<td class="td1"></td><td class="td2" style="text-align: center;color: red;">Sorry, there doesnt seem to be any results!</td><td class="td3"></td>'; 
     } 

    } 
    return $end; 
} 

如果我通过它只是返回job_app任何参数虽然有结果,因为其中一些行实际上具有job-app参数。如果我将job_app作为2并将job_type作为2,它应该会得到6个结果,但是它不会。培训相关PHP的其他部分:

DB列表功能:

$Job_Type = null; 
$Location = null; 
$Job_App = 0; 
if(!$_GET['Job_App'] == null){ 
    $Job_App = $_GET['Job_App']; 
} 
if(!$_GET['Job_Type'] == null){ 
    if(!$_GET['Job_Type'] == 0){ 
     $Job_Type = $_GET['Job_Type']; 
    } 
} 
if(!$_GET['Location'] == null){ 
    $Location = $_GET['Location']; 
} 
//irreleven stuff in between 
if(!$_GET['page'] == null){ 
    $pageno = ($_GET['page']-1)*15; 
    if(!$_GET['Job_Type'] == null){ 
     echo ''.getFilteredList($dbh, 15, $pageno, $Job_App, $Job_Type, $Location); 
    }else{ 
     echo ''.getGenericList($dbh, 15, $pageno, $Job_App); 
    } 
}else{ 
    if(!$_GET['Job_Type'] == null){ 
     echo ''.getFilteredList($dbh, 15, 0, $Job_App, $Job_Type, $Location); 
}else{ 
    echo ''.getGenericList($dbh, 15, 0, $Job_App); 
} 
} 

我思念的东西,以正确地过滤了他们:调用函数

function getGenericList($conn, $limit, $offset, $job_app) { 

    $query = $conn->prepare("SELECT * FROM `jobs_current` ORDER BY `jobs_current`.`job_comp_loc` ASC LIMIT :limit OFFSET :offset "); 
    $query->bindParam(':limit', $limit, PDO::PARAM_INT); 
    $query->bindParam(':offset', $offset, PDO::PARAM_INT); 
    $query->execute(); 

    $end = ""; 
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
    { 
     if($row['job_app'] == $job_app){ 
      $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
      $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
      $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
     }else if($job_app == 0){ 
      $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
      $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
      $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
     }else{ 
      return '<td class="td1"></td><td class="td2" style="text-align: center;color: red;">Sorry, there doesnt seem to be any results!</td><td class="td3"></td>'; 
     } 

    } 
    return $end; 
} 

PHP文件?我已经读了几遍自己,看起来是正确的,但没有按照预期过滤。

编辑:

我似乎并没有把它不够清晰,但它与查询,因为它返回while循环结束else语句成功。

+0

你不能,据我所知,使用占位符在'limit','为了by'或'group by'子句 – RamRaider

+0

@RamRaider我在这里看到,只有在使用预建的字符串而不是动态字符串的情况下才能使用。 – Deckerz

+0

我假设你已经尝试使用phpMyAdmin或类似的查询来查看生成的内容 – RiggsFolly

回答

0

您生成在while循环您的错误信息,所以你肯定得到结果:

while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
{ 
    if($row['job_app'] == $job_app){ 
     $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
     $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
     $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
    }else if($job_app == 0){ 
     $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
     $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
     $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
    }else{ 
     // Here you are in the while loop so you have results! 
     return '<td class="td1"></td><td class="td2" style="text-align: center;color: red;">Sorry, there doesnt seem to be any results!</td><td class="td3"></td>'; 
    } 
} 

你的问题是if条件不会在任何行相匹配。你需要弄清楚为什么,例如通过倾倒行。

+0

感谢您指出正确的方向,我想我需要重新生成SQL查询,以便我不必过滤它们那么晚 – Deckerz

0

我改变了功能,以便job_app在查询中,而不是在IF语句过滤以后

function getFilteredList($conn, $limit, $offset, $job_app, $Job_Type, $location) { 
    /* 
    <option value="0">Select category or Search all</option> 
    <option value="1">Business and Administration</option> 
    <option value="2">Education and Training</option> 
    <option value="3">Leisure, Travel and Tourism</option> 
    <option value="4">Information and Communication Technology</option> 
    */ 
    if($Job_Type == 1){ 
     $Job_Type2 = '%1%'; 
    }elseif($Job_Type == 2){ 
     $Job_Type2 = '%2%'; 
    }elseif($Job_Type == 3){ 
     $Job_Type2 = '%3%'; 
    }elseif($Job_Type == 4){ 
     $Job_Type2 = '%4%'; 
    }else{ 
     $Job_Type2 = '%1%2%3%4%'; 
    } 
    $query = $conn->prepare("SELECT * FROM `jobs_current` WHERE `job_type` LIKE :job_type AND `job_app` = :job_app ORDER BY `jobs_current`.`job_comp_loc` ASC LIMIT :limit OFFSET :offset "); 
    $query->bindParam(':limit', $limit, PDO::PARAM_INT); 
    $query->bindParam(':offset', $offset, PDO::PARAM_INT); 
    $query->bindParam(':job_app', $job_app, PDO::PARAM_INT); 
    $query->bindParam(':job_type', $Job_Type2, PDO::PARAM_STR); 
    $query->execute(); 

    $end = ""; 
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
    { 
     if($row !== null){ 
      $end = $end.'<tr class="hoverOver"><td class="td1"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_comp_loc'].'</a></td>'; 
      $end = $end.'<td class="td2"><a href="/jobview.php?id='.$row['id'].'">'.$row['job_desc'].'</a></td>'; 
      $end = $end.'<td class="td3"><a href="/jobview.php?id='.$row['id'].'">'.$row['location'].'</a></td></tr>'; 
     }else{ 
      return '<td class="td1"></td><td class="td2" style="text-align: center;color: red;">Sorry, there doesnt seem to be any results!</td><td class="td3"></td>'; 
     } 

    } 
    return $end; 
} 
+0

这很有道理 – RiggsFolly

+0

请注意,当没有行时,您将永远不会进入循环。您需要检查循环外部的行数,如果没有则返回错误消息。 – jeroen

+0

@ jeroen啊谢谢,我认为它进入了一次,如果没有结果不管,将更新 – Deckerz