已经三个小时了。我什么都试过了:(
基本上,使用一些我已经在其他项目中使用的代码,我等待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相关的东西我忽略了。。。
你知道可能发生了什么吗?
抱歉,篇幅太长了,但我想展示我尝试过的所有东西:(
提前感谢:)
2条答案
按热度按时间sulc1iza1#
请检查是否进入以下if状态
希望能有所帮助
tnkciper2#
这是一系列疯狂的事件,但最后(当然)是我的错。
我在以前的include文件中定义了一个服务器常量,但在代码中使用了服务器名称。
php从来没有给我一个错误回来,因为所有这些文件首先是由贝宝调用,它不是用户发起的,第二个日志关闭。
我启用了日志,看到了错误。
第一个让我困惑的问题是:
然后在这里:
基本上,因为
$conn
没有示例化,所有使用它的后续调用都失败了,返回了我认为是空字符串(表示没有错误)的内容,而实际上是一个false或null值。吸取的教训?好吧,在开发时保持php日志运行:)