Php 如果不存在,则插入新行并获取新的或现有的id

Php 如果不存在,则插入新行并获取新的或现有的id,php,mysql,insert,not-exists,last-insert-id,Php,Mysql,Insert,Not Exists,Last Insert Id,我想通过使用NOT EXISTS和last_insert_id执行以下操作。 下面的代码满足了我的需要,Col1是一个唯一的键,如果它已经存在,代码将不会插入数据。如果插入了新行或新行已经存在,则始终返回相关行的$id代码 <?php mysql_query(" INSERT table SET col1='data1', col2='data2' "); $result = mysql_query("SELECT id FROM table WHERE col1='data1' ")

我想通过使用NOT EXISTS和last_insert_id执行以下操作。 下面的代码满足了我的需要,Col1是一个唯一的键,如果它已经存在,代码将不会插入数据。如果插入了新行或新行已经存在,则始终返回相关行的$id代码

<?php 
mysql_query(" INSERT table SET col1='data1', col2='data2' ");

$result = mysql_query("SELECT id FROM table WHERE col1='data1' ") ;
while($row = mysql_fetch_array( $result )) { $id=$row['id'];}

header("Location:page.php?id=$id"); 
?>

让我把我的想法放在这里。我不知道我是否完全理解这个问题

关于重复密钥更新

不存在

在某些情况下,可以将DUAL指定为虚拟表名 如果未引用任何表:

其他想法

替换成

这与INSERT的工作原理完全相同,但有一个重要的例外。如果发现重复的行,它会先删除它,然后执行插入,因此不会收到错误消息

<?php 
   mysql_query(" REPLACE INTO table SET col1='data1', col2='data2' ");

那么,如果它满足您的需求,您的问题是什么?@altafhussain我也希望通过使用notexists和last_insert_id增加一个代码来提高性能
INSERT INTO funds (ID, Col1, Col2)
    SELECT 100, "value1", "value2"
    FROM dual
    WHERE NOT EXISTS (SELECT 1 
          FROM table 
          WHERE ID = 100
    );
<?php 
   mysql_query(" REPLACE INTO table SET col1='data1', col2='data2' ");
<?php 
   mysql_query(" INSERT IGNORE INTO table SET col1='data1', col2='data2' ");