NYCPHP Meetup

[nycphp-talk] mysql_insert_id Strangeness

Russ Demarest rsd at electronink.com
Tue Aug 5 09:45:15 EDT 2003


There are a couple strange things, I am not accustom to.

Why do you define the link column as NOT NULL and then default to ''? 
Is this not the equivalent of a contradiction? I doubt this is related.

Maybe I am old school or something but I normally set my mysql_query() 
equal to something like so

$sql = "INSERT into table blah blah";
$res = mysql_query($sql) or die("Error insert");
$new_id = mysql_insert_id($res); 	# The $res is not needed, it default 
to the last result set returned.

This is a little different than you have it. Maybe try it and see what 
happens.

Good Luck

On Tuesday, August 5, 2003, at 09:37 AM, Hans Zaunere wrote:

>
> 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
>
>
> _______________________________________________
> talk mailing list
> talk at lists.nyphp.org
> http://lists.nyphp.org/mailman/listinfo/talk
>




More information about the talk mailing list