mysql查询

k4emjkb1  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(208)

已经三个小时了。我什么都试过了:(
基本上,使用一些我已经在其他项目中使用的代码,我等待paypal的确认,我得到它,我应该将信息存储在db中。所有的贝宝信息是好的,完美的工作。
这就是我所尝试的:
考虑到db连接可能会在空闲一段时间后关闭,我重新连接了它,甚至重新创建了它(此时,我不关心内存泄漏、性能等)
尝试了简单的选择和插入
在每一行添加打印输出(到一个txt文件),打印所有可能的错误
我将查询打印到文件中,并将其复制/粘贴到adminer/phpmyadmin/heidisql中,查询不会出错
结果是:
我没有得到任何错误(所有 mysqli_connect_errno 以及 mysqli_error 总是空字符串)
数据库根本没有修改
这是代码的一部分,清除了无用的检查(不管怎样,它仍然有效):

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***");

总结一下:
(重新)连接到db时没有错误
查询 INSERT INTO sold SET txnid=2 如果用手写输入,则运行良好 mysqli_error 从不回馈错误 $conn->insert_id 总是空的
... 但是数据库永远不会更新!
如前所述,我试图打印一个简单的select的结果(结果总是空的),我试图在每一行后面放一个debug语句(它只是将字符串附加到debug.txt的末尾),并且每一行都被执行,所以在php中没有语法错误。。。我快疯了。。。
它运行在带有php7的ubuntu16.04 vps上,我不太熟悉php5和php7之间可能的区别,也许有一些php相关的东西我忽略了。。。
你知道可能发生了什么吗?
抱歉,篇幅太长了,但我想展示我尝试过的所有东西:(
提前感谢:)

sulc1iza

sulc1iza1#

请检查是否进入以下if状态

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

希望能有所帮助

tnkciper

tnkciper2#

这是一系列疯狂的事件,但最后(当然)是我的错。
我在以前的include文件中定义了一个服务器常量,但在代码中使用了服务器名称。
php从来没有给我一个错误回来,因为所有这些文件首先是由贝宝调用,它不是用户发起的,第二个日志关闭。
我启用了日志,看到了错误。
第一个让我困惑的问题是:

$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 没有示例化,所有使用它的后续调用都失败了,返回了我认为是空字符串(表示没有错误)的内容,而实际上是一个false或null值。
吸取的教训?好吧,在开发时保持php日志运行:)

相关问题