2011-12-02 64 views
0

這裏是我的代碼:PHP返回一個結果從MySQL,但如果我while循環的結果,什麼也不顯示

<?php 
    require('...........'); 
    require('................'); 

    $search_query = strip_tags(substr($_POST['search_query'], 0, 60)); 
    $region_query = strip_tags(substr($_POST['region_choice'], 0, 2)); 
    $class_query = $_POST['class_choice']; 
    $quick_search = strip_tags(substr($_POST['quick_search'], 0, 1)); 
      ; 

    # setup database connection 
    $db_ok = 1; 
    $dbh = @mysql_connect($GLOBALS['database']['hs'], $GLOBALS['database']['un'],$GLOBALS['database']['pw']); 
    if (! $dbh) { 
     $db_ok = 0; 
    } 
    $dbh_selected = @mysql_select_db($GLOBALS['database']['db'], $dbh); 
    if (! $dbh_selected) { 
     $db_ok = 0; 
    } 

    if ($db_ok == 1) { 
     $query_addition = ""; 

    if ($region_query > 0) { 
     $query_addition = " AND `location` = \"$region_query\" "; 
    } 

    if ($class_query > 0) { 
     $query_addition .= " AND `class` = \"$class_query\" "; 
    } 

    $query = "SELECT ID,date_active,title,location,environment,specialism FROM "; 
    $query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE()  AND `date_inactive` > CURDATE() 
    $query_addition AND `description` LIKE \"%$search_query%\" ORDER BY `ID`"; 
    mysql_real_escape_string($query); 
    //mysql_set_charset('utf-8', $query); 
    $result = mysql_query($query,$dbh); 

    $table_content = ""; 
    $row_count = 0; 

    if ($result) { 
     while ($row = mysql_fetch_row($result)) { 
      $id = $row[0]; 
      $loc = stripslashes($row[3]); 
      $title = htmlentities(stripslashes($row[2]));   
      $env = htmlentities(stripslashes($row[4]));   
      $spec = htmlentities(stripslashes($row[5])); 

      if ($row_count % 2 == 0) { 
       $table_content .= "<tr>"; 
      } else {  
       $table_content .= "<tr class=\"mellon\">"; 
      } 
      $table_content .= "<td><a href=\"?p=Vacature&ID=$id\" abbr=\"". $title . "\" title=\"" . $title ."\">" . $title . "</a></td>"; 
      $table_content .= "<td>" . get_location($dbh,$loc) . "</td>"; 
      $table_content .= "<td>" . $env . "</td>"; 
      $table_content .= "<td>" . $spec . "</td>"; 
      $table_content .= "</tr>\n"; 
      $row_count++; 
      if ($row_count == 20) { 
       break; 
      }   
     } 
    } 

    if ($row_count > 0) { 
     print " 
     <p>U heeft gezocht op: <b>$search_query</b></p> 
     <p>Hieronder vindt u een overzicht van gevonden vacatures met een maximum aantal van 20. Er zijn in totaal $row_count vacatures gevonden.</p> 
     <table class=\"table_layout\"> 
      <tbody> 
      <tr> 
       <th>Titel</th><th>Regio</th><th>Werkomgeving</th><th>Specialisme</th> 
      </tr> 
      $table_content 
     </tbody></table>"; 

    } else { 
     print " 
     <p>U heeft gezocht op: <b>$search_query</b></p> 
     <p><h4>Helaas heeft uw zoekopdracht geen resultaten opgeleverd</h4> </p> 
     " ; 
    } 

} else { 
    print " 
    <p>U heeft gezocht op: <b>$search_query</b></p> 
    <p>Het zoeken is mislukt..</p> 
    "; 
} 
?> 

我嘗試了一切,如果我的var_dump我得到他有結果,只有while循環似乎不起作用。順便說一句,只有當我使用像ö這樣的特殊字符時,它纔會工作,我使用它會起作用。我試過了一切,從htmlspecialchar,htmlentities等。 我也嘗試用str_replace和strtr轉換特殊字符。請幫幫忙,將感謝

+2

mysql_num_rows($ resultset)返回結果集? –

+0

值得一提的是,當我在mysql中運行代碼時,它完美地工作。 – machie27

回答

2

在整個查詢中執行mysql_real_escape_string是錯誤的做法。您轉義您插入的INDIVIDUAL字符串,而不是整個查詢。通過轉義整個查詢,你打破了它。

$x = mysql_real_escape_string("Miles O'Brien"); 
$sql = "SELECT something FROM somewhere WHERE username='$x'"; 

會產生

SELECT something FROM somewhere WHERE username='Miles O\'Brien'; 

通過比較,你的版本將產品

SELECT something FROM somewhere WHERE username=\'Miles O\'Brien\'; 

和完全失敗。

+0

感謝球員,但我仍然有問題,當我嘗試用'ö'進行搜索時,這不會返回結果,而當我用'o'進行搜索時,它會起作用。然而,字符串是f.e.用'zorgcoördinator'搜索16個月,用'zorgcoordinator'搜索15個字符。 @ marc-b – machie27

+0

我調整了mysql_real_escape字符串感謝。我現在所解決的問題現在已經解決了,我用了工作的utf8_decode!再次感謝所有看我的問題 – machie27

2

只在查詢參數不能在整個查詢運行mysql_real_escape_string(),:

$query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE() 
    AND `date_inactive` > CURDATE()" 
    . mysql_real_escape_string($query_addition) . " AND `description` 
    LIKE '%" . mysql_real_escape_string($search_query)"%' ORDER BY `ID`"; 

查詢中的行情將得到逃脫,如果你使用它的整個事情。

+0

感謝球員,但我仍然有問題,當我嘗試用'ö'進行搜索時,這不會返回任何結果,而當我使用'o'進行搜索時,它會起作用。然而,字符串是f.e.用'zorgcoördinator'搜索16個月,用'zorgcoordinator'搜索15個字符。 @tandu – machie27

+0

我調整了mysql_real_escape字符串感謝。我現在所解決的問題現在已經解決了,我用了工作的utf8_decode!再次感謝所有人看我的問題 – machie27

2

您似乎在使用mysql_real_escape_string函數錯誤。你應該將它用於放入mysql查詢中的變量,而不是整個查詢。

試試這個:

$query_addition = ""; 
if ($region_query > 0) { 
    $query_addition .= " AND `location` = '".mysql_real_escape_string($class_query)."' "; 
} 

if ($class_query > 0) { 
    $query_addition .= " AND `class` = '".mysql_real_escape_string($class_query)."' "; 
} 

$query = "SELECT ID,date_active,title,location,environment,specialism FROM "; 
$query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE()  AND `date_inactive` > CURDATE() 
     $query_addition AND `description` LIKE '".mysql_real_escape_string($search_query)."' ORDER BY `ID`"; 

$result = mysql_query($query,$dbh); 

幫助?

+0

感謝球員,但我仍然有問題,當我嘗試用'ö'進行搜索時,這不會返回結果,而當我用'o'進行搜索時,它會起作用。然而,字符串是f.e.用'zorgcoördinator'搜索16個月,用'zorgcoordinator'搜索15個字符。 @sonny – machie27

+0

我調整了mysql_real_escape字符串感謝。我現在所解決的問題現在已經解決了,我用了工作的utf8_decode!再次感謝所有的人看我的問題 – machie27

1

該查詢不返回任何行。

將您的查詢打印出來並在phpmyadmin/console中運行以確定,然後更改查詢以獲取將返回所需行的查詢。

要整理出來,你必須將你的任務分成更小的子任務。
算法很簡單

  1. 只在控制檯/ phpMyAdmin的把PHP一邊ANAD工作與SQL。
    處理您的查詢,直到使之有效。 將此查詢記錄下載供將來參考。

  2. 你回PHP從
    打印此查詢出組裝查詢,並與一個來自(1)
    工作代碼進行比較,直到你有2個查詢相同

  3. 最後,用PHP運行它。

PS。我知道mysql_real_escape_string($query);是偶然添加到其他嘗試使其工作,但無論如何,你必須刪除該行。