从MySQL升级到mysqli后PHP查询无结果,求测试代码修复方案
修复mysqli查询无法获取行数的问题
你的代码存在几处关键问题,导致查询后无法正常返回行数,以下是针对性的修复步骤:
1. 修正连接错误检查的拼写错误
原代码中$link -> connect_errorno是拼写错误,正确的属性名为connect_errno,这个错误会导致连接异常判断逻辑失效:
if ($link->connect_errno) { echo "failed to connect to database " . $link->connect_error; exit(); }
2. 增加查询结果有效性检查
mysqli_query执行失败时会返回false,直接对false调用mysqli_num_rows会引发错误,必须先判断查询是否成功:
$result = mysqli_query($link, $query); if (!$result) { echo "Query failed: " . mysqli_error($link); exit(); } $numrows = mysqli_num_rows($result); echo " Number of rows = ". $numrows;
3. (推荐)设置数据库连接字符集
连接成功后添加字符集配置,避免因字符集不匹配导致的查询异常:
mysqli_set_charset($link, 'utf8mb4');
完整修复后的代码
<!DOCTYPE html> <html> <head> <meta content="text/html; charset=windows-1252" http-equiv="Content-Type"> <title>Data Access Test</title> <?php $servername = "localhost"; $username = "*********"; $password = "##########"; $dbname = "xxxxxxxxxxx"; $link = mysqli_connect($servername, $username, $password, $dbname); // 修正连接错误检查拼写 if ($link->connect_errno) { echo "failed to connect to database " . $link->connect_error; exit(); } else { echo "success"; }; // 设置字符集 mysqli_set_charset($link, 'utf8mb4'); echo "trying query"; $query = "SELECT * FROM administrative where 1"; echo $query; // 检查查询是否成功 $result = mysqli_query($link, $query); if (!$result) { echo "Query error: " . mysqli_error($link); exit(); } $numrows = mysqli_num_rows($result); echo " Number of rows = ". $numrows; ?> </head> <body> </body> </html>
修复后,若查询存在错误会直接输出错误信息,方便排查;若查询成功则会正常显示行数。如果仍然显示行数为0,需要确认administrative表是否真的没有数据,或者表名是否存在大小写匹配问题(MySQL表名的大小写敏感性取决于操作系统和配置)。
内容的提问来源于stack exchange,提问作者Somebeach
相关产品推荐
相关产品推荐

