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

PDO从数据库取数据存入数组后,使用in_array输出内容失败求助

问题分析与解决方案

嘿,看起来你在构建数组的时候犯了一个常见的小错误——你每次循环都在重新创建数组,而不是把新元素追加进去,这就导致最终数组里要么只有最后一条数据,要么根本没正确构建,自然没法用in_array正常工作。让我帮你拆解问题并修正代码:

你的代码核心问题

在while循环里,你每次都把单条数据的civ_licenses赋值给变量,然后尝试创建数组,但这样的操作会覆盖之前的数组内容,而不是累加元素。比如你原本的代码片段:

while($row = $stmt->fetch()) {
    $arrayResult = $row['civ_licenses'];
    $civArray = array($arrayRes... // 这里不仅没写完,每次循环都重新定义$civArray
}

这样循环结束后,$civArray只会保留最后一次循环的那个值,甚至可能因为代码不完整导致语法错误。

修正后的完整代码

<?php
try {
    // 初始化PDO连接,开启错误异常方便调试
    $conn = new PDO('mysql:host=localhost;dbname=driving','root','');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sel = "SELECT first_name, civ_licenses FROM users";
    $stmt = $conn->prepare($sel);
    $stmt->execute();

    // 关键:在循环外先初始化一个空数组
    $civArray = [];

    // 循环获取每一行数据,指定FETCH_ASSOC确保返回关联数组
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        // 将当前行的civ_licenses追加到数组末尾
        $civArray[] = $row['civ_licenses'];
    }

    // 现在可以正常使用in_array检查值是否存在了
    $targetLicense = "你要查找的驾照类型";
    if(in_array($targetLicense, $civArray)) {
        echo "找到了匹配的驾照:{$targetLicense}";
    } else {
        echo "未找到匹配的驾照类型";
    }

} catch(PDOException $e) {
    // 捕获并输出数据库错误
    echo "数据库操作失败:" . $e->getMessage();
}
?>

额外注意事项

如果你的civ_licenses字段存储的是逗号分隔的字符串(比如"A,B,C"这种格式),那你需要先把字符串拆分成子数组,再合并到主数组中,示例代码如下:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // 拆分逗号分隔的字符串为子数组
    $licenses = explode(',', $row['civ_licenses']);
    // 去除元素前后可能的空格
    $licenses = array_map('trim', $licenses);
    // 合并到主数组
    $civArray = array_merge($civArray, $licenses);
}

这样处理后,$civArray就会包含所有从数据库取出的驾照类型,in_array也能正常工作啦。

内容的提问来源于stack exchange,提问作者Tibbe USDF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:51:22