簡體   English   中英

PDO SQL查詢無法正常工作

[英]PDO SQL Query not working as intended

我在PHP中具有以下功能:

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個結果,但事實並非如此。 Relevent PHP的其他部分:

數據庫列表功能:

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

我是否缺少適當過濾的東西? 我本人已經閱讀了幾次,這似乎是正確的,但是沒有按預期進行過濾。

編輯:

我似乎不太清楚,它在查詢中成功,因為它在while循環中返回end else語句。

您在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條件在任何行中都不匹配。 您需要找出原因,例如通過轉儲行。

我更改了函數,以便稍后在查詢中而不是在IF語句中過濾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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM