Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 即使数据库中没有数据,ID也会重复_Php_Pdo - Fatal编程技术网

Php 即使数据库中没有数据,ID也会重复

Php 即使数据库中没有数据,ID也会重复,php,pdo,Php,Pdo,我有那个PDO查询来检查数据库中是否存在重复的txn\u id。目前,我的数据库没有记录 每次我在paypal sandbox上运行我的ipn脚本时,我总是收到一封电子邮件,上面写着重复的交易ID。我不明白。我的数据库中没有记录,因此该事务应该已经完成 有人能发现错误吗 $this_txn = $_POST['txn_id']; $stmt = $conn->prepare(" SELECT txn_id FROM Transactions WHERE txn_id =:txn_id L

我有那个PDO查询来检查数据库中是否存在重复的
txn\u id
。目前,我的数据库没有记录

每次我在
paypal sandbox
上运行我的ipn脚本时,我总是收到一封电子邮件,上面写着
重复的交易ID。
我不明白。我的数据库中没有记录,因此该事务应该已经完成

有人能发现错误吗

$this_txn = $_POST['txn_id'];
$stmt = $conn->prepare("
SELECT txn_id FROM Transactions 
WHERE txn_id =:txn_id LIMIT 1
");
$stmt->bindParam('txn_id',$this_txn);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
if ($rows > 0) {
    $messagerr = "Duplicate Transaction ID.";
    mail("example@test.com", "Duplicate txn_id in the IPN system", $messagerr, "From:        test@example.com" );
    exit(); 
} 

您试图将数组与整数/false进行比较。相反,请检查数组的计数:

if (count($rows) > 0) {
您还可以检查:

编辑:这是完整代码,还将为您提供有关哪些ID显示为副本的更多信息:

$stmt->execute();
if ($stmt->rowCount() > 0) {
    $messagerr = "Duplicate Transaction ID. There are ".$stmt->rowCount() ." rows";
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    foreach($rows as $row){
        $messageerr .= "\n TxnId = ".$row['txn_id'];
    }
    mail("example@test.com", "Duplicate txn_id in the IPN system", $messagerr, "From:        test@example.com" );
    exit(); 
} 
改用stmt->rowCount()>0,fetchAll返回一个数组

编辑

更改:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
if ($rows > 0) {
    $messagerr = "Duplicate Transaction ID.";
    mail("example@test.com", "Duplicate txn_id in the IPN system", $messagerr, "From:        test@example.com" );
    exit(); 
} 
致:


这将检查受最后一条SQL语句影响的行数。您的原始代码无法工作,因为它返回一个数组。因此,即使没有行,$rows也将是eaual Array()

表达式中还有两个额外的符号

if ($rows) {
行得通


这就是您实际需要的所有内容。

$rows>0
这是不正确的,$rows不是将其与零进行比较的数字,请参见:
fetchAll
不返回要与
>0
进行比较的整数。使用
$stmt->num_rows
你是PHP程序员还是刚找到脚本?从你所做的其他回答和评论来看,看起来你拿走了某人的脚本或是在网上找到的。检查行数的部分并不是代码的唯一问题。@N.B.这是第一次尝试创建购物车,必须使用paypal
IPN
对PDO也有点陌生。是的,如果使用行数方法。如果使用count($rows),则需要保留fetchAll行。我进行了编辑。这也会给你更多关于复制内容的信息。你能给我一个完整的答案吗。我仍然觉得很难理解你在说什么。我很抱歉it@Angel您的代码是否与上面一样,只是添加了使用$count;的更改@安吉尔,你能更新你原来帖子中的代码吗?这样我就可以看到你在做什么了?
  $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
  if ($stmt->rowCount() > 0) {
        $messagerr = "Duplicate Transaction ID.";
        mail("example@test.com", "Duplicate txn_id in the IPN system", $messagerr, "From:        test@example.com" );
        exit(); 
    } 
if ($rows) {