2016-04-04 3 views
0

Ich bin ziemlich sicher, dass diese Frage viel von der Community gestellt worden sind, aber ich habe keine gute Antwort gefunden.Wie überprüft man, ob Abfrage kein Ergebnis in PDO

ich habe diesen Code:

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

Was ich will, ist fragen, wie zu überprüfen, ob meine Anfrage ein Ergebnis oder nicht zurückgegeben?. Mein aktueller Code funktioniert, aber ich habe ein Problem, dass diese Zeile:

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

Nehmen Sie 1 Reihe von Ergebnissen, so dass ich bin fehlt 1 Zeile in foreach-Schleife. Ich habe versucht, FetchColumn() (wo es das gleiche Problem) und RowCount() (wo es 0 für SELECT-Anweisung zurückgeben).

Wenn möglich, möchte ich vermeiden mit "SELECT COUNT (1) FROM [Tabelle]" zu überprüfen, ob Daten existieren, oder was passiert in foreach-Schleife außerhalb nur für diese 1 Zeile.

Jede Hilfe wird geschätzt. Danke

+1

wow, ich downvote erwarten, aber das überrascht mich immer noch. @ downvoter, vorsichtig zu erklären, wenn Sie eine Lösung kennen? –

Antwort

0

Sie können Ihre Abfrage Rückgabeergebnis überprüfen oder nicht COUNT() mit Verwendung von mit SELECT COUNT(1) FROM.. dies als

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

aber das Problem ist, dass $ checkRow Zeile 1 Zeile aus dem Ergebnis nehmen, so dass foreach nicht auf diese Zeile zugreifen kann. –

+0

change 'foreach ($ findMaterial als $ dataMaterial) {' zu 'foreach ($ checkRow als $ dataMaterial) {' – Saty

+0

ah es tut mir leid, habe das nicht gesehen, ich werde es sofort versuchen. Danke. –

Verwandte Themen