MySQL-запрос не выполняется при прослушивании ответа PayPal - PullRequest
0 голосов
/ 06 июня 2018

Уже ТРИ часа.Я пробовал ВСЕ: (
В основном, используя какой-то код, который я уже использовал в других проектах, я жду подтверждения от PayPal, получаю его и должен хранить информацию в БД. Вся информация PayPal в порядке иотлично работает.
Это то, что я пытался:

  1. Думая, что соединение с БД может в течение некоторого времени закрываться, будучи бездействующим, я снова подключил его и даже ВОССТАНОВИЛ (Меня не волнуют утечки памяти, производительность и т. Д. И т. Д.)
  2. Пробовал как простые SELECT, так и INSERT
  3. Добавлены распечатки (в текстовый файл) каждую строку, выводя все возможные ошибки
  4. Я печатаю запрос в файле и копирую / вставляю его в Adminer / PHPMyAdmin / HeidiSQL, и запрос РАБОТАЕТ без ошибок

Результаты:

  1. Я не получаю ЛЮБОЙ ошибки (все mysqli_connect_errno и mysqli_error ВСЕГДА являются пустыми строками)
  2. БД не изменяется вообще

Это частькод, очищенный от бесполезных проверок(это работает, в любом случае):

if ($sandbox)   
  $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
else
  $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
if (!$fp) {
  debug("http error");
} else {
  fputs($fp, $header . $req);
  while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (stripos($res, "VERIFIED") !== false) {
      if (is_array($data)) {
        $conn->close();
        $conn = new mysqli(SERVER_NAME, DB_USERNAME, DB_PASSWORD, DB_NAME);
        if (!$conn) {
          $err  = "Error: Unable to connect to MySQL." . PHP_EOL;
          $err .= "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
          $err .= "Debugging error: " . mysqli_connect_error() . PHP_EOL;              
          debug("DB ERROR $err");
        }             
        $conn->set_charset('utf8');
        $s = "INSERT INTO sold SET txnid=2";
        debug("trying query $s");
        $sql = $conn->query($s);
        $err = mysqli_error($sql);
        debug("DB result ***$sql*** ***$err***");
        $orderid = $conn->insert_id;
        debug("orderid ***$orderid***");

Подводя итог:

  1. НЕТ ОШИБКИ при (повторном) подключении к БД
  2. Запрос INSERT INTO sold SET txnid=2 работает ОТЛИЧНО, если вводится вручную
  3. mysqli_error НИКОГДА не выдает ошибку обратно
  4. $conn->insert_id всегда ПУСТО *
  5. ... но БД НИКОГДА не обновляется!
  6. Как уже говорилось, я пытался напечатать результат простого SELECT (а результат всегда пуст), я пытался поместить оператор отладки (он просто добавляет строку в конец debug.txt) после каждогои каждая строка, и каждая строка выполняется, поэтому в PHP нет синтаксической ошибки, ... я схожу с ума ...
  7. Он работает на Vbu Ubuntu16.04 с PHP7, и я неслишком знаком с возможными различиями между PHP5 и PHP7, может быть, есть что-то связанное с PHP, что я упускаю из виду ...

Есть идеи, что происходит?
Извините за длину, ноЯ хотел показать ВСЕ вещи, которые я пробовал: (
Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Это была CRAZY последовательность событий, но в конце это была (конечно :) :) :) моя ошибка.
Я определил константу SERVER в предыдущем включаемом файле, но я использовал SERVER_NAME в своем коде.
PHP никогда не возвращал мне ошибку, потому что, во-первых, этот файл вызывался PayPal, и он не был инициирован пользователем, а во-вторых, журналы были отключены.
Я включил журналы и увидел ошибку.
Первая проблема, которая меня отбросила, была здесь:

$conn = new mysqli(SERVER_NAME, DB_USERNAME, DB_PASSWORD, DB_NAME);
  if (!$conn) {
    // IT NEVER GOES INSIDE HERE IF IT FAILS!!!

А потом здесь:

$sql = $conn->query($s);
$err = mysqli_error($sql);
debug("DB result ***$sql*** ***$err***");

По сути, поскольку $conn не был создан, всепоследующие вызовы, использующие его, терпели неудачу, возвращая то, что я считал пустой строкой (что означает «НЕТ ОШИБКИ»), в то время как на самом деле это было либо ложное, либо значение NULL.

Извлеченный урок?Хорошо, продолжайте работу журнала PHP во время разработки:)

0 голосов
/ 06 июня 2018

Пожалуйста, проверьте, подходит ли оно к условию if ниже

if (stripos($res, "VERIFIED") !== false) {
  if (is_array($data)) {
   //Put some debug code here and check

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...