douxuanjie2692 2016-07-13 02:48
浏览 62
已采纳

如何知道insert .. select是否确实插入了任何行?

Here is my code:

$stm = $dbh
->prepare("INSERT INTO resend_pass(user_id, token, date_time)
            SELECT ?, ?, unix_timestamp()
            FROM dual
            WHERE NOT EXISTS( SELECT count(*) AS num_week,
                                     COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))),0)  as num_day,
                                     COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  hour))),0) as num_hour,
                                     COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 minute))),0) as num_1min
                                  FROM resend_pass
                                 WHERE user_id   = ?  
                                   AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK))
                                HAVING num_week > 11 OR num_day > 5 OR num_hour > 3 OR num_1min > 0 );");

if($stm->execute(array(10, 'token', 10))){
    echo 'inserted';
} else {
    echo 'failed';
}

My script always prints inserted, even when no row inserted. Why? And how can I fix it?

Noted that I've used this approach to know if it inserted successfully.

  • 写回答

3条回答 默认 最新

  • duanpao4522 2016-07-13 03:00
    关注

    INSERT ... SELECT is considered successful when it INSERTs all the rows returned by SELECT; if the SELECT returns zero rows then the statement will successfully insert zero rows.

    To determine if rows have been inserted, one has to test the number of affected rows; with PDO this is done by querying the `PDOStatement::rowCount() method, something like this:

    try {
        $stm = $dbh->prepare("INSERT .. SELECT query");
        $stm->execute();
        if ( $stm->rowCount() > 0 ) {
            echo 'inserted';
        } else {
            throw new Exception('No rows inserted');
        }
    } catch(Exception $e) { 
        echo $e;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答