2012-09-27 31 views
6

行有这个疑问:计数有多少插入了最后一个SQL查询

INSERT INTO db1.outbox (DestinationNumber, TextDecoded) 
SELECT User.CellPhone, '$SMSMessage' as TextDecoded 
FROM db2.User 
WHERE User.PurchaseDate BETWEEN 2012-01-01 AND 2012-01-31 

它多行插入到“发件箱”表。但我不知道插入了多少行。如何从该SQL语法中插入行数?谢谢。

更新 我得到了“-1”作为此命令的结果:

$insertedRows = mysql_query("SELECT ROW_COUNT()"); 
$rowInserted = mysql_fetch_array($insertedRows); 
$rowInserted = $rowInserted[0]; 
echo $rowInserted; 

,但我看到有插在我的桌子27行。我做错了什么?

+0

原因“选择ROW_COUNT()”不为你工作为t在PHP将控制权交还给您时,您的查询不再是最近的查询。 Mysql返回-1,因为PHP已经调用了“SELECT ROW_COUNT()”和“SELECT LAST_INSERT_ID()”。选择信息函数后,“ROW_COUNT()”的结果为-1。这就是为什么你需要使用特殊的PHP变量'''mysql_affected_rows''',它在执行查询后缓存来自“SELECT ROW_COUNT()”的值。 –

回答

9

把这个放在你最后的声明;

SELECT ROW_COUNT(); 

更新1

如何使用mysql_affected_rows,例如

<?php 

    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
    if (!$link) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db('mydb'); 

    /* this should return the correct numbers of deleted records */ 
    mysql_query('you SQL QUERY HERE'); 
    printf("Records deleted: %d\n", mysql_affected_rows()); 

?> 
+0

我只是试图使用ROW_COUNT()函数,但给我-1作为结果。实际上,我插入了27行。看到我上面这篇文章的更新。 –

+1

@RobertHanson哦,我看到你正在使用'PHP',尝试使用'mysql_affected_rows()'这个PHP手册上看到,http://php.net/manual/en/function.mysql-affected-rows.php –

+0

@RobertHanson看到我更新的答案。 –

1

这里有一些可能性:

»如果你有一个AUTO_INCREMENT列,您可以获取之前的行号和插入后

» SELECT ROW_COUNT()返回行的数量改变,删除或上一语句插入如果它是一个UPDATEDELETE,或INSERTdoc

»您可以使用mysqli_affected_rows(因为mysql_功能被弃用),以获得一个前一次MySQL操作所影响的行数(doc

$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 

if (!$link) { 
    printf("Can't connect to localhost. Error: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* Insert rows */ 
mysqli_query($link, "INSERT INTO myTable VALUES (1)"); 
printf("Affected rows (INSERT): %d\n", mysqli_affected_rows($link));