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中运行以确保正确,然后更改查询以获得将返回所需行的查询 要解决问题,您必须将您的任务划分为更小的子任务。
算法非常简单
解决您的查询,直到它生效。 记下此查询,以备将来参考
打印此查询并与(1)中的查询进行比较
计算代码,直到有两个相同的查询
另外,我知道
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_解码成功了!再次感谢大家关注我的问题