2014-06-26 32 views
1

嘿,我有一个查询,将插入到表中一个新的数据,我希望在同一时间更新一个outher表与我输入的新数据的ID。例如:SQL插入和更新在同一时间

mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')"); 
$query = mysql_query("SELECT `id` FROM `test` WHERE `name` = 'Mark'"); 
$id = mysql_result($query,0); 
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'"); 

我该如何在同一时间做到这一点?因为这样做我只插入新的数据,我不更新其他数据。

Cumps。

+2

旁注:删除您的值中的反引号并用引号替换。 –

+0

尝试查找** MERGE **声明。 –

+0

'insert'查询只能针对单个表。您需要运行多个单独的查询,或使用触发器。 –

回答

2

试试这个:

mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')"); 
$id = mysql_insert_id(); 
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'"); 

我已经改变了反引号为单引号在你的价值观第一次插入,反引号不应该被用于字段值。

此外,我已经改变它只使用两个查询,mysql_insert_id()会得到最后插入的ID,而无需查询它。

编号:http://www.php.net/manual/en/function.mysql-insert-id.php

+1

工作谢谢! – user3745394

+0

必须等待7分钟才能接受:/ – user3745394

+1

已投票,因为您已解决反引号问题,此问题已进行无效修改并可能导致OP的问题。另外,给OP提供解决方案。 –

0

首先,你不需要选择,以获得ID,有mysql_insert_id()了点。

然后,你必须使用一个事务,使两种查询感觉像在同一时间执行:

mysql_query('BEGIN'); 
mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')"); 
$id = mysql_insert_id(); 
mysql_query("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'"); 
mysql_query('COMMIT'); 

事务确保两个语句执行,并没有其他的脚本可以以任何方式在它们之间来。

+0

+1,我不明白为什么有人会投票给你,因为你的回复是唯一的好解决方案!当必须执行多个相互依赖的查询时,事务是至关重要的... –