You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:42:51