如何使用PHP / MYSQL在单个查询中执行SELECT和INSERT?

时间:2009-07-13 07:25:23

标签: php mysql logic identity

我有一个包含3个字段的表user_nameid, Name, Emailidauto_increment字段)。我想在PHP中执行以下查询,但它不返回任何结果。

INSERT INTO user_name (Name, Email) VALUES ('Example', 'example@xyz.com'); 
SELECT LAST_INSERT_ID() AS 'userid';

当我在PHP中执行上述查询时,它不会返回任何内容。

$_SQL="INSERT INTO user_name (Name,Email) VALUES ('Example', 'example@xyz.com'); 
SELECT LAST_INSERT_ID() AS 'userid';";

$result_last_id = @mysql_query($_SQL);
$rs_insert = mysql_fetch_array($result_last_id);

$new_userid = $rs_insert['userid'];

任何人都可以告诉我如何将两个查询同时执行。

7 个答案:

答案 0 :(得分:8)

查看mysql_insert_id()功能。

mysql_query($insertStatementOnly);
$new_userid = mysql_insert_id();

答案 1 :(得分:5)

看起来您不需要执行多个查询,但我在下面介绍了如何执行此操作。您想要的是最后插入的ID,您可以从mysql_insert_id获得。

执行多个查询

来自对mysql_query的文档的评论:

  

该文档声称“不支持多个查询”。

     

但是,似乎支持多个查询。您只需将标志65536作为mysql_connect的5参数(client_flags)传递。该值在/usr/include/mysql/mysql_com.h中定义:   #define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */

     

一次执行多个查询,mysql_query函数将仅返回第一个查询的结果。其他查询也将被执行,但你不会得到它们的结果。

或者,请查看mysqli库,其中包含multi_query method

答案 2 :(得分:1)

真的很简单:你就是做不到。

http://php.net/mysql_query

答案 3 :(得分:1)

我还建议你避免使用mysql_query中的错误抑制运算符'@',因为你可能没有意识到任何mysql错误。至少做

mysql_query($sql) or die("error: " . mysql_error()) ;

答案 4 :(得分:1)

如果您使用Zend Framework和PDO定义的MySQL数据库,您只需使用:

$database=Zend_Db::factory('PDO_MySQL',Array('hostname'=>'localhost','username'=>'x','password'=>'y','dbname'=>'z');
$connectionHandle=$database->getConnection();
$rowsInserted=$connectionHandle->insert('database_name','INSERT INTO x (a,b) VALUES (c,d)');
if ($rowsInserted>0) {
 $autoIncrementValue=$connectionHandle->lastInsertId();
}

答案 5 :(得分:1)

是您可以使用Shell命令<BR> mysql -user -p -h database -e' SQL语句1; SQL语句2; SQL语句3; .......; “

Php / MYSQL Programmer

答案 6 :(得分:0)

这可能会做你想要的:

insert into table1 (Name,Emails) values ('qqq','www');
select max(id) as lastinserted from table1;