Я создаю собственный обработчик IPN в PHP, который проверяет данные, которые 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 затем используется в БД и отвечает за одну из строк в БД.
Несмотря на это, теперь он молча терпит неудачу. Сценарий работает, в противном случае.
здесь вы можете найти полные копии всех трех используемых файлов и файл журнала.
Как видите, после пользовательской функции
ничего не записывает в журнал
и, когда я ставлю этот последний рабочий 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;
Спасибо миллион парней. я бы никогда не нашел их без твоей помощи.