【发布时间】:2018-11-15 19:05:10
【问题描述】:
已经 三个 小时了。我什么都试过了:(
基本上,使用我已经在其他项目中使用的一些代码,我等待 PayPal 的确认,我得到它,我应该将信息存储在数据库中。所有 PayPal 信息均正常且运行良好。
这是我尝试过的:
- 考虑到数据库连接可能会在空闲一段时间后自行关闭,我重新连接它,甚至重新创建它(此时,我不在乎内存泄漏、性能等)
- 尝试了简单的 SELECT 和 INSERT
- 每行添加打印输出(到 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***");
总结一下:
- (重新)连接到数据库时没有错误
- 查询
INSERT INTO sold SET txnid=2如果手动输入,则运行完美 -
mysqli_error永远不会返回错误 -
$conn->insert_id始终为空 - ...但数据库从未更新!
- 如前所述,我尝试打印一个简单 SELECT 的结果(结果始终为空),我尝试在每个行,而且每一行都执行,所以PHP没有语法错误,...我要疯了...
- 它在带有 PHP7 的 Ubuntu16.04 VPS 上运行,我不太熟悉 PHP5 和 PHP7 之间可能存在的差异,也许我忽略了一些与 PHP 相关的东西...
知道可能发生了什么吗?
很抱歉篇幅太长,但我想展示我尝试过的所有东西:(
提前谢谢你:)
【问题讨论】:
-
您的
if (is_array($data)) {在哪里关闭? -
几行下来......我不想把整个源代码,只是重要的部分。如前所述,有一次我在每一行都放了一个打印输出,以确保它不会因为 PHP 中的语法错误而停止:(