我在PHP中構建了一個自定義IPN處理程序,它驗證Paypal在回發中發送的數據,然後將其中的一些插入到sqlite數據庫中。爲什麼我的自定義IPN處理腳本停止執行?
腳本的每個部分都工作過。 交易報告爲有效,並記錄。一切正常,直到第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上使用,並且它負責數據庫中的某一行。
即便如此,它現在卻失敗了。該腳本適用,否則。
您可以找到所有使用的三個文件和日誌文件的完整副本。 正如你所看到的,它不會在自定義函數
之後寫入任何內容,並且當我在最後一個工作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;
感謝一百萬人。沒有你的幫助,我從來沒有找到這些。
檢查PHP錯誤日誌 –
我以前檢查過它,但沒有任何有用的東西,除了關於設置時區(我照顧的)的警告。儘管如此,我正在使用tail來檢查它,現在我發現我錯過了一大堆致命錯誤,所有這些都與定義我的自定義函數的文件的第48行中的'不支持的操作數'有關。奇怪的是,第48行只是一個if語句。 'if($ num!=(count($ keywords - 1))){'並且錯誤僅在三小時前開始顯示 – FitzmorrisPR
我發現我認爲是原始問題。那些if語句應該是:'if($ num!=(count($ keywords) - 1))'此外,由於某種原因,$ db'對象不可用。我必須通過$ GLOBALS數組訪問它。這意味着每一個我有'$ db-> quote($ somevar)'的地方'我需要''GLOBALS ['db'] - > quote($ somevar)''完成這兩個更改後,擺脫這個錯誤下劃線George Cummins指出,一切都很好。 – FitzmorrisPR