我正在PHP中构建一个自定义IPN处理程序,它验证Paypal在回发中发送的数据,然后将其中一些插入到sqlite数据库中。
以前脚本的每个部分都有效。 事务报告为有效并已记录。一切正常,直到第32行,调用自定义函数。
这是第32行:
$sql = insert_query_builder("PP_Data", $keywords);
以及如何在require()
'd文件中定义函数:
function insert_query_builder($table, $keywords, $info = NULL) {
$sql_1 = "INSERT INTO $table (";
$sql_2 = ") VALUES (";
foreach ( $keywords as $num => $keyword ) {
if (isset($info)) {
if ($num != (count($keywords - 1))) {
$sql_2 .= $db->quote($info[$keyword]) . ", ";
$sql_1 .= $keyword . ", ";
} else {
$sql_2 .= $db->quote($info[$keyword]) . ")";
$sql_1 .= $keyword;
}
} else {
if ($num != (count($keywords - 1))) {
$sql_2 .= $db->quote($_POST[$keyword]) . ", ";
$sql_1 .= $keyword . ", ";
} else {
$sql_2 .= $db->quote($_POST[$keyword]) . ")";
$sql_1 .= $keyword;
}
}
}
$sql = $sql_1 . $_sql_2;
return $sql;
}
此代码有效。然后,它生成的SQL语句将在DB上使用,并且它负责DB中的一行。
即便如此,现在它仍然无声地失败。否则,脚本可以正常工作。
here您可以找到所有三个文件的完整副本和日志文件。 如您所见,在自定义函数
之后,它不会向日志写入任何内容并且,当我把最后一个工作file_put_contents()
放在它之后,它就会停止工作。
有什么想法吗?执行php -f IPNrx.php
没有输出,并记录一个无效的事务,就像它应该的那样,但它不测试逻辑的那个分支。
首先,if语句应为if ($num != (count($keywords) - 1))
,而不是if ($num != (count($keywords - 1)))
其次,$ db对象不在函数范围内,所以我需要在函数顶部添加global $db
第三,在结尾附近有一个额外的下划线; $sql = $sql_1 . $_sql_2;
应为$sql = $sql_1 . $sql_2;
感谢一百万人。没有你的帮助,我永远都找不到这些。
答案 0 :(得分:0)
此行引用了一个不存在的变量:
$sql = $sql_1 . $_sql_2;
应该是:
$sql = $sql_1 . $sql_2;
因此,查询无效。您应该在执行SQL查询后检查输出(例如mysql_error()
)。