我在这个条件语句中使用的逻辑有问题吗?


Is there something wrong with the logic I've applied in this conditional statement?

这基本上是paypal IPN的一部分,我正在检查发送的订单ID (txn_id)是否已经存在。如果有,我不希望发生任何事情,如果没有,然后发布到数据库。它似乎张贴到数据库,即使它存在,为什么它这样做?

$receiver_email = $_POST['receiver_email']; 
$payment_status = $_POST['payment_status'];
$txn_id = $_POST['txn_id'];
$txn_sql =" SELECT * FROM test where item2 = $txn_id ";
$order_num = mysqli_query($Connection, $txn_sql);
$num_rows = mysqli_num_rows($order_num);
if ($num_rows > 0){
  $unique = 'no';
}
else {
  $unique = 'yes';
}

if ($receiver_email == "seller@paypalsandbox.com" && $payment_status == "Completed" && $unique =="yes" ) {
$Connection = mysqli_connect("localhost", "user", "pw", "db");
// Check connection
if (mysqli_connect_errno()) {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }
 $sql="INSERT INTO test (item1, item2)
 VALUES ('$txn_id', '$unique')";
 $do = mysqli_query($Connection, $sql);

我得到,我一直为item2发送的值"yes",如果它存在,它不应该完全不发布吗?我哪里做错了?

首先,确保item2字段是一个整数,因为您没有比较'。接下来,尝试var_dump($num_rows)并查看实际结果,甚至var_dump($_POST)

如果真的是> 1,尝试echo $txn_sql,复制sql语句并运行到您的实际数据库(使用navicat或其他),看看您的数据库是否有问题。

php.iniini_set('display_errors", "on")中打开display_errors选项来检查您是否有连接问题或其他错误。

我只是回答这个问题来帮助你调试你的问题。希望有帮助