如何检查查询是否返回PDO中没有结果

时间:2016-04-04 08:34:22

标签: php arrays oracle pdo

我很确定社区已经对这个问题进行了很多询问,但我还没有找到任何好的答案。

我有这段代码:

$keyword = '%'.strtoupper($_POST['keyword']).'%';
$limitMaterial = 'AS-%';
$findMaterial = $oracle->prepare('SELECT inventory_item_id, segment1, description, inventory_item_status_code FROM mtl_system_items_b WHERE segment1 LIKE ? AND (segment1 LIKE ? OR description LIKE ?)');
$findMaterial->bindParam(1, $limitMaterial, PDO::PARAM_STR);
$findMaterial->bindParam(2, $keyword, PDO::PARAM_STR);
$findMaterial->bindParam(3, $keyword, PDO::PARAM_STR);
$findMaterial->execute();
$checkRow = $findMaterial->fetch(PDO::FETCH_ASSOC);

$boldKeyword = '<font color="red"><b>' . $keyword . '</b></font>';

if($checkRow !== false){
    var_dump($checkRow); // this is for testing only
    foreach($findMaterial as $dataMaterial){
        var_dump($dataMaterial); // this is for testing only
        $dataMaterial = array_change_key_case($dataMaterial,CASE_LOWER);
        $code = str_ireplace($keyword,$boldKeyword,$dataMaterial['segment1']);
        $desc = str_ireplace($keyword,$boldKeyword,$dataMaterial['description']);
        if(isset($_POST['idf'])){
            $idf = $_POST['idf'];
            echo '<div class="show" align="left" onclick="select('.$idf.',this); return false;"><span>'.$code.'</span><span style="visibility: hidden; font-size:1px;" class="find_material_'.$idf.'">'.$dataMaterial['segment1'].'</span></br>'.$desc.'</div>'; 
        } else {
            echo '<div class="show" align="left"><span>'.$code.'</span><span style="visibility: hidden; font-size:1px;" class="basic_code">'.$dataMaterial['segment1'].'</span></br>'.$desc.'</div>'; 
        }
    }
} else {
    echo '<div class="show" align="left">Part Code Not Found</div>'; 
}

$findMaterial = null;

我想问的是,如何检查我的查询是否返回结果?。我目前的代码正在运行,但我有一个问题:

$checkRow = $findMaterial->fetch(PDO::FETCH_ASSOC);

从结果中取一行,所以我在foreach循环中缺少一行。我已经尝试了fetchColumn()(它有相同的问题)和rowCount()(其中它为SELECT语句返回0)。

如果可能,我想避免使用&#34; SELECT COUNT(1)FROM [table]&#34;检查数据是否存在,或者只在第一行中执行foreach循环中发生的事情。

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用COUNT()检查您的查询返回结果,而不使用SELECT COUNT(1) FROM..

$checkRow = $findMaterial->fetchAll();
if (count($checkRow) > 0) {
    foreach ($checkRow as $dataMaterial) {
        // your code
    }
} else {
    echo "NO RESULT FOUND";
}