2016-03-04 4 views
0

У меня есть эта функция в PHP: «! К сожалению, кажется, не существует каких-либо результатов»PDO SQL Query не работает как задумано

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:

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 файл, который вызывает функцию:

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

я упускаю что-то фильтровать их должным образом? Я прочитал это сам несколько раз, и это кажется правильным, но просто не фильтрует, как предполагалось.

EDIT:

Я не кажется, сделать это достаточно ясно, это не удастся с запросом, как он возвращает конец еще заявление, в то время цикла.

+0

вы не можете, AFAIK, используйте заполнители в '' 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 фильтруют в запросе, а не в заявлении Если позже

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

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