PHP从mysql返回一个结果,但是如果我在循环结果时没有显示任何内容

PHP从mysql返回一个结果,但是如果我在循环结果时没有显示任何内容,php,mysql,Php,Mysql,这是我的密码: <?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['c

这是我的密码:

<?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>
    ";
}   
?>

我已经尝试了所有的方法,如果我得到一个结果,只有while循环似乎不起作用。顺便说一句,只有当我使用像ö这样的特殊角色时,它才起作用,当然,我使用的是o,它会起作用。我尝试了从htmlspecialchar、htmlentities等各种方法。
我还尝试用str_替换和strtr转换特殊字符。请帮助,非常感谢您不能对整个查询运行
mysql\u real\u escape\u 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`";
$query.=$GLOBALS['database']['jobs\u table']。“其中'date\u active`CURDATE()
. mysql\u real\u escape\u字符串($query\u addition)。“和`说明`
例如“%”。mysql_real_escape_string($search_query)“%”按'ID'排序;

如果您在整个查询中使用它,查询中的引号将被转义。

您似乎错误地使用了mysql\u real\u escape\u 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);
$query_addition=”“;
如果($region\u query>0){
$query\u addition.=“和`location`='”.mysql\u real\u escape\u string($class\u query)。“;
}   
如果($class\u query>0){
$query\u addition.=“和`class`=”。mysql\u real\u escape\u字符串($class\u query)。“;
}
$query=“选择ID、活动日期、标题、位置、环境、专业来源”;
$query.=$GLOBALS['database']['jobs\u table']。其中'date\u active`CURDATE()
$query\u addition和'description`LIKE'。mysql\u real\u escape\u string($search\u query)。“'ORDER BY`ID`”;
$result=mysql\u查询($query,$dbh);

有帮助吗?

查询没有返回任何行

打印出查询并在phpmyadmin/console中运行以确保正确,然后更改查询以获得将返回所需行的查询

要解决问题,您必须将您的任务划分为更小的子任务。
算法非常简单

  • 将PHP放在一边,仅在控制台/phpmyadmin中使用SQL。
    解决您的查询,直到它生效。 记下此查询,以备将来参考

  • 返回PHP,从
    打印此查询并与(1)中的查询进行比较
    计算代码,直到有两个相同的查询

  • 最后,用PHP运行它


  • 另外,我知道
    mysql\u real\u escape\u string($query)是在其他尝试中意外添加的,但无论如何,您必须删除该行

    对整个查询执行mysql\u real\u escape\u字符串是错误的做法。您可以转义插入的单个字符串,而不是整个查询。通过逃避整个查询,您正在破坏它

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

    而且完全失败。

    mysql_num_rows($resultset)在结果集中返回什么?值得一提的是,当我在mysql中运行代码时,它工作得非常好。谢谢大家,但我仍然有一个问题,当我尝试用“ö”搜索时,它不会返回结果,而当我用“o”搜索时,它工作得很好。但是,当f.e.使用“zorgcoöCoordinator”16个字符进行搜索时,以及使用“zorgcoordinator”15个字符进行搜索时,会出现该字符串@tanduI调整了mysql\u real\u转义字符串,谢谢。我以前的问题现在解决了,我用utf8_解码成功了!再次感谢大家关注我的问题谢谢大家,但我仍然有问题,当我尝试用“ö”搜索时,它不会返回结果,而当我用“o”搜索时,它会起作用。但是,当f.e.使用“zorgcoöCoordinator”16个字符进行搜索时,以及使用“zorgcoordinator”15个字符进行搜索时,会出现该字符串@sonnyI调整了mysql\u real\u转义字符串,谢谢。我以前的问题现在解决了,我用utf8_解码成功了!再次感谢大家关注我的问题谢谢大家,但我仍然有问题,当我尝试用“ö”搜索时,它不会返回结果,而当我用“o”搜索时,它会起作用。但是,当f.e.使用“zorgcoöCoordinator”16个字符进行搜索时,以及使用“zorgcoordinator”15个字符进行搜索时,会出现该字符串@marc bI调整了mysql\u real\u转义字符串,谢谢。我以前的问题现在解决了,我用utf8_解码成功了!再次感谢大家关注我的问题