检查`INSERT SELECT`是否实际插入了行

时间:2014-05-08 12:32:05

标签: php mysql sql propel

我尝试使用PROPEL ORM使用INSERT SELECT在表格中插入一些行。我试图逐步填充表,直到复制完所有行。

$con = Propel::getConnection();
$sql = "INSERT INTO tmp_orders (id, name)
        SELECT  oo.id, oo.slip
        FROM   original_orders oo
            LEFT JOIN tmp_orders tmp ON oo.id=tmp.id
        WHERE tmp.id IS NULL
        LIMIT 10"  ;

        $stmt = $con->prepare($sql);
        $stmt->execute();

理想情况下,我想在循环中运行此脚本,直到复制完所有记录。一旦没有更多的记录要插入,我想停止循环。

我的初步解决方案是发出2个查询。首先从original_orders中选择以检查选择是否不再返回数据,然后在另一个查询中执行INSERT SELECT
问题是查询太慢,所以我想避免做同样的选择两次只是为了看看是否有更多的数据要插入。

如果INSERT SELECT实际插入了什么,有没有办法获得?我在运行SELECT LAST_INSERT_ID();后尝试了INSERT SELECT,但它始终返回0

1 个答案:

答案 0 :(得分:4)

由于Propel使用PDO作为抽象层,因此您可以使用PDOStatement::rowCount

在您的情况下,这将按如下方式完成:

$stmt->rowCount();