NYCPHP Meetup

[nycphp-talk] mysql_insert_id Strangeness

Hans Zaunere hans at nyphp.org
Tue Aug 5 09:37:22 EDT 2003


Bonjour,


I've got a strange situation here, and I'm hoping it's something I'm overlooking, rather than a bug.


The setup:

MySQL 4.0.13-max-log
PHP 4.3.2 running as a DSO under Apache 1.3.28
FreeBSD 4.8-STABLE 

MySQL is the mysql.com binary package; everything else is compiled from source


The table:  

CREATE TABLE `links` (
  `linkid` int(10) unsigned NOT NULL auto_increment,
  `link` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`linkid`),
  UNIQUE KEY `link` (`link`)
) TYPE=MyISAM;


The code:

<?php
$MYDB = mysql_connect('localhost','xxx','xxx');


$links = array('http://hans.zaunere.com',
               'http://zaunere.com',
               'http://hans.zaunere.com',
               'http://nyphp.org',
               'http://lists.nyphp.org',
               'http://nyphp.org'
              );


foreach( $links as $key => $link ) {

   $tmp = mysql_escape_string($link);

   mysql_query("INSERT INTO xxx.links (linkid,link)
                VALUES (NULL,'$tmp')", $MYDB);

   $R_linkid = mysql_insert_id($MYDB);

   if( !$R_linkid ) {
      $result = mysql_query("SELECT linkid FROM xxx.links WHERE link='$tmp'", $MYDB);
      echo '<pre>Selected '.mysql_num_rows($result).' rows.</pre>';
      $R_linkid = (int) mysql_result($result,0,0);
   }

   echo "<pre>Array key: $key <br>Link: $link <br>Linkid: $R_linkid </pre><br><br>";
}



The output:

Array key: 0 
Link: http://hans.zaunere.com 
Linkid: 1 

Array key: 1 
Link: http://zaunere.com 
Linkid: 2 

Array key: 2 
Link: http://hans.zaunere.com 
Linkid: 2 

Array key: 3 
Link: http://nyphp.org 
Linkid: 3 

Array key: 4 
Link: http://lists.nyphp.org 
Linkid: 4 

Array key: 5 
Link: http://nyphp.org 
Linkid: 4 


The problem:

It seems that mysql_insert_id() returns the inserted ID from the previous 'successful' INSERT query, rather than it getting reset to 0 since the immedieately previous INSERT fails to produce an AUTO_INCREMENT ID (as it's documented).  I sure hope I'm missing something; otherwise this bug is burning me in ways I have yet to discover.

Thanks,

H





More information about the talk mailing list