PHP函数无法返回SQL查询结果数组的语法错误排查求助
排查你的PHP函数问题
我帮你梳理一下这段代码里的几个关键问题,一个个来解决:
1. 变量作用域问题
函数内部的$pdo属于全局变量,默认情况下函数无法直接访问全局作用域的变量。你需要在函数内部声明它为全局变量,或者把$pdo作为参数传递给函数。
比如添加全局声明:
function frequenz_suchen_datum_zeit($fdatum_von = "2000-01-01", $fdatum_bis = "2020-01-01", $fuhrzeit_von = "00:00:00", $fuhrzeit_bis = "23:59:59") { global $pdo; // 声明使用全局的$pdo变量 // 后续代码... }
2. return语句的变量名错误
你最后返回的是abfrage,但这个变量是带美元符号的$abfrage,少了$符号会导致PHP找不到对应的变量。正确写法是:
return $abfrage;
3. 数组索引未加引号
在echo语句里,$test [hg_ger_b]中的索引hg_ger_b没有加引号,PHP会把它当作常量解析,而不是字符串索引。应该改成:
echo $test['hg_ger_b'];
4. 严重的SQL注入风险
你直接把函数参数拼接到SQL语句里,这会导致严重的SQL注入漏洞,绝对不能在生产环境这么用。强烈建议使用PDO的预处理语句来绑定参数,示例如下:
function frequenz_suchen_datum_zeit($fdatum_von = "2000-01-01", $fdatum_bis = "2020-01-01", $fuhrzeit_von = "00:00:00", $fuhrzeit_bis = "23:59:59") { global $pdo; $sql = "SELECT SUM(hg_ger_b) as hg_ger_b, SUM(hg_ger_v) as hg_ger_v, SUM(hg_zub_b) as hg_zub_b, SUM(hg_zub_v) as hg_zub_v, SUM(hg_ers_b) as hg_ers_b, SUM(hg_ers_v) as hg_ers_v, SUM(hg_rep) as hg_rep, SUM(pr_ger_b) as pr_ger_b, SUM(pr_ger_v) as pr_ger_v, SUM(pr_zub_b) as pr_zub_b, SUM(pr_zub_v) as pr_zub_v, SUM(pr_ers_b) as pr_ers_b, SUM(pr_ers_v) as pr_ers_v, SUM(pr_rep) as pr_rep, SUM(so_ser) as so_ser, SUM(so_mie) as so_mie, SUM(so_was) as so_was, SUM(so_wer) as so_wer, SUM(so_web) as so_web FROM frequenz WHERE datum BETWEEN :fdatum_von AND :fdatum_bis AND uhrzeit BETWEEN :fuhrzeit_von AND :fuhrzeit_bis"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':fdatum_von', $fdatum_von); $stmt->bindParam(':fdatum_bis', $fdatum_bis); $stmt->bindParam(':fuhrzeit_von', $fuhrzeit_von); $stmt->bindParam(':fuhrzeit_bis', $fuhrzeit_bis); $stmt->execute(); $abfrage = $stmt->fetch(); return $abfrage; }
把这些问题都修复后,你的函数应该就能正常工作了。
内容的提问来源于stack exchange,提问作者fschneider
相关产品推荐
相关产品推荐

