在收听PayPal答案时未执行MySQL查询

时间:2018-06-06 07:26:56

标签: php mysql paypal

已经三个小时。我尝试了一切:(
基本上,使用我已在其他项目中使用的一些代码,我等待来自PayPal的确认,我得到它,我应该将信息存储在数据库中。所有PayPal信息都可以正常工作 这就是我的尝试:

  1. 认为数据库连接可以关闭自己空闲一段时间,我重新连接它甚至重新连接它(此时,我不关心内存泄漏,性能等等。)
  2. 尝试了简单的SELECT和INSERT
  3. 每行添加打印输出(到txt文件),打印所有可能的错误
  4. 我在文件中打印查询,然后将其复制/粘贴到Adminer / PHPMyAdmin / HeidiSQL中,查询WORKS没有任何错误
  5. 结果:

    1. 我没有收到任何错误(所有mysqli_connect_errnomysqli_error都是空字符串)
    2. 根本不修改数据库
    3. 这是代码的一部分,清除了无用的检查(无论如何都有效):

      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. 时没有错误
      3. 如果手动输入
      4. ,查询INSERT INTO sold SET txnid=2将完美运行
      5. mysqli_error永远不会给出错误
      6. $conn->insert_id始终为EMPTY
      7. ...但数据库永远不会更新!
      8. 如上所述,我试图打印一个简单SELECT的结果(结果总是为空),我尝试在每个之后放一个调试语句(它只是将字符串附加到debug.txt的末尾) line,并且每一行都被执行,所以PHP中没有语法错误,......我疯了......
      9. 它运行在带有PHP7的Ubuntu16.04 VPS上,我对PHP5和PHP7之间可能存在的差异不太熟悉,也许有一些与我有关的PHP相关...
      10. 知道可能会发生什么吗? 抱歉这个长度,但我想展示我尝试过的所有东西:(
        提前谢谢你:)

2 个答案:

答案 0 :(得分:0)

请检查它是否进入下面的if条件

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

希望它可能会有所帮助

答案 1 :(得分:0)

这是一系列疯狂事件,但最后却是(当然:) :) :)我的错 我在之前的包含文件中定义了一个SERVER常量,但我在代码中使用了SERVER_NAME PHP从来没有给我一个错误,因为首先这个文件是由PayPal调用的,它不是用户启动的,其次是日志关闭。
我启用了日志,我看到了错误 让我失望的第一个问题是:

norm://

然后在这里:

norm://

基本上,由于$conn = new mysqli(SERVER_NAME, DB_USERNAME, DB_PASSWORD, DB_NAME); if (!$conn) { // IT NEVER GOES INSIDE HERE IF IT FAILS!!! 没有被实例化,所以使用它的所有后续调用都失败了,回复了我认为是一个空字符串(意思是没有错误),而实际上是假值或NULL值
学过的知识?好吧,在开发时保持PHP日志运行:)