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

PDO连接与mysqli函数混用报错:期望类型mysqli,实际传入PDO

解决PDO连接与mysqli函数混用导致的类型不匹配错误

报错信息

Uncaught TypeError: mysqli_query(): Argument #1 ($conn) must be of type mysqli, PDO given
类型提示:Expected type 'mysqli'. Found 'PDO'

问题根源

你用PDO扩展创建了数据库连接对象$conn,但在查询数据时错误调用了mysqli系列函数(mysqli_query、mysqli_fetch_array)。PDO和mysqli是PHP中两个独立的数据库扩展,它们的API不能交叉混用,必须统一使用其中一种的语法。

修复步骤

1. 修正数据库连接配置

首先检查connection.php中的数据库名,把占位符dbname=///替换为你实际的数据库名称,比如:

<?php
$servername = "localhost";
$username = "root";
$password = ""; 

// 替换dbname为真实数据库名
$conn = new PDO("mysql:host=$servername;dbname=your_database_name", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

2. 重构view.php的查询逻辑

把原有的mysqli语法全部替换为PDO语法,同时修复代码中的变量不一致问题,并且加入SQL注入防护:

<?php
include("../config/connection.php");

// 先验证参数是否合法
if (isset($_GET['name_surname']) && trim($_GET['name_surname']) !== '') {
    $name_surname = $_GET['name_surname'];
    
    // 使用PDO预处理语句,避免SQL注入
    $sql = "SELECT * FROM problems_water WHERE name_surname = :name_surname";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':name_surname', $name_surname, PDO::PARAM_STR);
    $stmt->execute();
    
    // 遍历结果集,获取关联数组
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
    <h3>姓名:</h3>
    <p><?php echo htmlspecialchars($row["name_surname"]); ?></p>
    <h3>手机号:</h3>
    <p><?php echo htmlspecialchars($row["phone_number"]); ?></p>
    <h3>地址:</h3>
    <p><?php echo htmlspecialchars($row["address"]); ?></p>
    <h3>区域:</h3>
    <p><?php echo htmlspecialchars($row["area"]); ?></p>
    <h3>创建时间:</h3>
    <p><?php echo htmlspecialchars($row["created_at"]); ?></p>
<?php
    }
}
?>

关键改动说明

  • 替换mysqli_query为PDO的预处理流程(prepare()+bindParam()+execute()),彻底避免SQL注入风险
  • 用$stmt->fetch(PDO::FETCH_ASSOC)替代mysqli_fetch_array(),获取关联数组格式的查询结果
  • 修正原代码中循环变量$problems_water与输出变量$row不一致的问题
  • 输出内容时用htmlspecialchars()转义,防止XSS攻击
  • 增加参数合法性校验,避免未定义索引的警告

内容的提问来源于stack exchange,提问作者KHL kh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:33