为什么我的自定义IPN处理脚本会停止执行?

时间:2011-08-07 02:21:17

标签: php pdo paypal-ipn

我正在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;

感谢一百万人。没有你的帮助,我永远都找不到这些。

1 个答案:

答案 0 :(得分:0)

此行引用了一个不存在的变量:

$sql = $sql_1 . $_sql_2;

应该是:

$sql = $sql_1 . $sql_2;

因此,查询无效。您应该在执行SQL查询后检查输出(例如mysql_error())。