使用mysql_query('set names utf8')获取数据失败,脚本及代码问题求助
问题分析与修复方案
你的代码里有几个关键问题导致无法正常获取数据,我来帮你拆解并修正:
1. 混用mysql_*和mysqli_*函数
你用mysql_connect()建立连接,但后续用mysqli_fetch_array()读取结果——这两个是PHP不同的数据库扩展,函数完全不能交叉使用,必须统一用一套。而且mysql_*系列函数在PHP 5.5+已被废弃,PHP 7+直接移除,强烈建议改用mysqli_*扩展。
2. 数据库连接参数错误
mysql_connect()只接受3个参数(主机、用户名、密码),你写了4个参数(把数据库名也传进去了),这是mysqli_connect()的用法,导致连接本身就失败了。
3. mysql_query()参数顺序错误
mysql_query()的正确顺序是mysql_query(查询语句, 连接资源),你把连接资源放在了前面,直接导致查询执行失败。
修正后的完整代码(推荐用mysqli面向过程写法)
// 用mysqli_connect建立连接,参数顺序正确 $db = mysqli_connect("localhost", "root", "", "news"); if (!$db) { die("数据库连接失败: " . mysqli_connect_error()); } // 设置字符集,mysqli用mysqli_set_charset更规范可靠 mysqli_set_charset($db, "utf8"); // 执行查询,mysqli_query参数是连接资源在前,SQL在后 $result = mysqli_query($db, "SELECT * FROM news_list order by id LIMIT 0,4"); // 检查查询是否成功 if (!$result) { die("查询失败: " . mysqli_error($db)); } // 用mysqli_fetch_array读取结果 while ($row = mysqli_fetch_array($result)) { ?> <li> <a href="?id=<?php echo $row['id']; ?>" class=""> <div class=""> <img width="64" height="64" src="<?php echo $row['images']; ?>" class="" alt="" itemprop="image" /> </div> <div class=""> <?php echo substr($row['title'], 0, 30); // 补全你未写完的截取逻辑,示例为截取标题前30字符 ?> </div> </a> </li> <?php } // 释放结果集并关闭连接 mysqli_free_result($result); mysqli_close($db); ?>
关键说明
- 统一使用
mysqli_*函数,彻底避免扩展混用的兼容性问题。 mysqli_set_charset()比set names 'utf8'更可靠,会同时设置客户端、连接和结果集的字符集。- 增加了连接/查询的错误检查,方便你快速定位问题。
- 修正了链接里的
#?id=,去掉多余的#,否则URL会变成锚点,无法正确传递id参数。
如果坚持要使用旧的mysql_*函数(不推荐),修正后的代码如下:
// 先建立连接,再选择数据库 $db = mysql_connect("localhost", "root", ""); if (!$db) { die("数据库连接失败: " . mysql_error()); } mysql_select_db("news", $db); // 设置字符集 mysql_query("set names 'utf8'", $db); // 执行查询,参数顺序正确 $result = mysql_query("SELECT * FROM news_list order by id LIMIT 0,4", $db); if (!$result) { die("查询失败: " . mysql_error($db)); } while ($row = mysql_fetch_array($result)) { // 后续HTML部分和上面一致 }
内容的提问来源于stack exchange,提问作者user2226832
相关产品推荐
相关产品推荐

