如何修改PHP函数,基于所有唯一CR编号获取对应数据库字段数据
问题分析与修改方案
1. 修复调试输出的语法错误
原代码中Line A和Line Y的echo语句存在语法问题,导致print_r无法正确执行,甚至可能触发PHP语法报错中断后续代码运行。
错误写法:
echo "<pre>; print_r($distinctCRNumbers); echo </pre>; // Line A
修正后:
echo "<pre>"; print_r($distinctCRNumbers); echo "</pre>"; // Line A
Line Y的调试代码做同样修改即可。
2. 改用参数化查询避免字符串拼接问题
直接将$crNumber拼接到SQL语句中,不仅有SQL注入风险,还可能因字符匹配问题导致部分CR编号查询失效。参数化查询能确保每个CR编号都被正确解析:
修改循环内的查询逻辑:
foreach ($distinctCRNumbers as $crNumber) { $query = " SELECT NEW_COLUMN_1, NEW_COLUMN_2 FROM your_table_name WHERE NUMBER = ?"; // 参数化执行查询(适配多数数据库抽象层) $stmt = $database->prepare($query); $stmt->execute([$crNumber]); // 获取查询结果 $row = $stmt->fetch(PDO::FETCH_ASSOC); // ... 后续赋值逻辑 }
注:如果你的
$database对象使用的是自定义封装类,可调整为对应参数化语法,核心是避免直接字符串拼接变量。
3. 可选:保留无结果的CR编号记录
如果需要输出中包含所有传入的CR编号(即使数据库无对应记录),可以去掉if ($row)的判断,改为默认值填充:
$filePaths[$crNumber] = [ 'NEW_COLUMN_1' => $row['NEW_COLUMN_1'] ?? null, 'NEW_COLUMN_2' => $row['NEW_COLUMN_2'] ?? null ];
4. 验证数据库记录有效性
确认数据库表your_table_name中确实存在NUMBER为GOOD-MORNING的记录,可直接在数据库客户端执行SQL验证:
SELECT NEW_COLUMN_1, NEW_COLUMN_2 FROM your_table_name WHERE NUMBER = 'GOOD-MORNING';
内容的提问来源于stack exchange,提问作者flash
相关产品推荐
相关产品推荐

