我有一个执行以下操作的网页(代码非常简化,仅显示相关代码。
mysql_query("insert into table1 (field1) values ('value')");
$last_id = mysql_insert_id();
$result = mysql_query("select * from table1 t inner join ... where id = $last_id");
write_a_file_using_result($result);
事实上,该文件是使用与我在表格行中找到的数据集不同的数据集创建的。
我唯一的解释是:
mysql_insert_id
返回相同的值 结果:使用数据集1生成文件,而表行包含数据行2。
mysql 5.0.51b
表格:
CREATE TABLE `table1` (
`id` int(11) NOT NULL auto_increment,
(...)
我知道MyISAM不支持交易。但我真的希望插入两行并获得两次插入相同的id是不可能的,这样就可以覆盖该行。
MyISAM在这一点上是不安全还是我忽略了另一种解释?
我知道php的mysql扩展已过时,但我还没有重写该应用程序。
答案 0 :(得分:1)
MyISAM到目前为止是不安全的
没有。 mysql_insert_id
保证仅返回正确的值。
还是我忽略了另一种解释?
最有可能。检查你的代码。
答案 1 :(得分:0)
没有在MyISAM中听说过id问题。 您可以在调用last_insert_id时尝试设置链接标识符,例如
$link = mysql_connect(...);
mysql_query("insert into table1 (field1) values ('value')",$link);
$last_id = mysql_insert_id($link);
$result = mysql_query("select * from table1 t inner join ... where id = $last_id",$link);
write_a_file_using_result($result);