2011-12-02 155 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);是偶然添加到其他尝试使其工作,但无论如何,你必须删除该行。