PHP与MySQLi搜索无结果问题:代码执行始终进入else分支
问题分析与修复方案
嘿,我一眼就瞅出你这段代码里的两个关键问题,正是它们导致搜索一直走else分支、没返回结果:
SQL语句中的变量引用错误
你现在的SQL里写的是LIKE '%user_query%',这里的user_query是硬编码的字符串,数据库会去查找包含"user_query"这几个字符的内容,而不是用户实际输入的搜索词!你应该把它替换成之前转义好的$search变量,也就是写成LIKE '%$search%',这样才能把用户输入的内容代入查询。mysqli_fetch_assoc的参数用错了
你写的mysqli_fetch_assoc($queryResult)是错的——$queryResult是mysqli_num_rows($run)返回的行数(整数),而mysqli_fetch_assoc需要的是查询返回的结果集对象,也就是$run这个变量。所以这里得改成mysqli_fetch_assoc($run)。
下面是修正后的完整代码:
<?php if(isset($_POST['search'])){ $search = mysqli_real_escape_string($connection, $_POST['user_query']); $sql = "SELECT * FROM search WHERE search_title LIKE '%$search%' OR search_desc LIKE '%$search%' OR search_key LIKE '%$search%' "; $run = mysqli_query($connection, $sql); $queryResult = mysqli_num_rows($run); if($queryResult > 0){ while($rel_rows = mysqli_fetch_assoc($run)){ echo "<div id='post'> <a href='#'><img src='$rel_rows[search_img]'></a> <a href='#'><h4 class='post_name'>$rel_rows[search_title]</h4></a> <p class='post_info'> $rel_rows[search_desc]</p> </div>"; } } else{ echo "There are no results for your search"; } } ?>
另外提个小建议:以后可以用var_dump($sql)输出一下生成的SQL语句,就能很直观地看到问题所在啦~
内容的提问来源于stack exchange,提问作者yoshik karnawat
相关产品推荐
相关产品推荐

