将PDO的Fetch All查询转换为Mysqli,请求校验转换正确性
PDO转MySQLi代码的正确性检查
原始PDO代码
$connect = new PDO("mysql:host=localhost; dbname=testing;", "root", ""); function fill_select_box($connect, $category_id) { $query = " SELECT * FROM team"; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); $output = ''; foreach($result as $row) { $output .= '<option value="'.$row["id"].'">'.$row["teamname"].'</option>'; } return $output; }
你的MySQLi尝试代码
$connect= new mysqli('localhhost', 'root', '', 'testing'); if(!$connect){ die(mysqli_error($connect)); } function fill_select_box($connect, $category_id){ $sql="SELECT * FROM team"; $result=mysqli_query($connect,$sql); while ($row = mysqli_fetch_assoc($result)){ echo '<option value="'.$row["id"].'">'.$row["teamname"].'</option>'; } }
存在的问题及修正点
- 连接参数错误:
localhhost多打了一个h,应该改为localhost,否则无法正常连接数据库。 - 错误处理不当:连接失败时
mysqli_error($connect)不能正常工作,因为此时$connect是false,应该改用mysqli_connect_error()获取连接错误信息。 - 函数逻辑不符:原PDO函数是构建HTML字符串后返回,让调用者决定何时输出;你的代码直接在函数内
echo输出,调用函数时会直接打印内容,不符合原函数的设计逻辑。 - 资源未释放:查询结果集使用后最好调用
mysqli_free_result($result)释放资源,避免不必要的内存占用(虽然PHP会自动回收,但显式释放更规范)。 - 安全性不足:原代码和你的代码都直接拼接HTML,没有对数据进行转义,存在XSS风险,应该用
htmlspecialchars()对输出的字段值进行转义。 - 冗余参数保留:函数参数
$category_id在原PDO代码和你的代码中都未使用,如果后续不需要这个参数可以删除,若需要根据分类筛选则要修改SQL语句添加条件。
修正后的MySQLi代码
// 数据库连接部分 $connect = new mysqli('localhost', 'root', '', 'testing'); if ($connect->connect_error) { die('数据库连接失败: ' . $connect->connect_error); } function fill_select_box($connect, $category_id) { // 只查询需要的字段,提升查询效率 $sql = "SELECT id, teamname FROM team"; $result = mysqli_query($connect, $sql); // 处理查询错误 if (!$result) { die('查询失败: ' . mysqli_error($connect)); } $output = ''; while ($row = mysqli_fetch_assoc($result)) { // 转义输出内容,防止XSS攻击 $escapedId = htmlspecialchars($row['id'], ENT_QUOTES); $escapedTeamName = htmlspecialchars($row['teamname'], ENT_QUOTES); $output .= "<option value=\"{$escapedId}\">{$escapedTeamName}</option>"; } // 释放结果集资源 mysqli_free_result($result); // 返回构建好的HTML字符串 return $output; }
内容的提问来源于stack exchange,提问作者JahIsGucci
相关产品推荐
相关产品推荐

