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
相关产品推荐
相关产品推荐

