Re: setting SQL variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To accomplish this in the past, it is assumed that the last entered ID is the highest (since it auto 
increments)

To solve this simply, I would use (truncated a bit):

<?php
$insertSQL = "insert into table1(test) values(1)";
$idSQL = "select top(id) from table1";

$someVar = mysql_result(mysql_fetch_array($idSQL));

$theID = $someVar[0]; // contains the ID to use in the subsequent transactions

?>

Good luck, let me know if you need any more assistance.

- Nick Stinemates

On Fri, Jan 19, 2007 at 09:38:01AM +1300, Bruce Cowin wrote:
> What about doing all of that in a stored proc and handle the transaction in there?  I've never done that with MySQL (only SQL Server) but I'm assuming it's possible.
> 
> 
> Regards,
> 
> Bruce
> 
> >>> marga <marga@xxxxxxxxxx> 18/01/2007 10:37:04 p.m. >>>
> Hi,
> 
> I create a sql variable with php code. Is possible that it didn't works?
> 
> In order to maintain the integrity I open a transaction to do all
> inserts. First insert a row in table1. I need these Insert ID
> to make the follow Inserts in the relations tables. Is not possible to use
> mysql_insert_id() and assing it in a php variable, because
> mysql_insert_id() is executed after the COMMIT, I think.
> 
> I try to set a sql variable, do "echo" of the queries and paste the SQL
> code in SQL console and works fine. But I have a SQL error if I execute
> the php code. The mysql_error returns "" and mysl_errno return 0.
> 
> How to obtain the insert id of table1 and use it in the rest of inserts
> into the transaction?
> 
> Thanks for advance!
> 
> 
> 
> 
> I have a structure like this:
> 
> CREATE TABLE `table1` (
>   `id` int(11) NOT NULL auto_increment,
>    `test` int(11),
>   PRIMARY KEY  (`id`),
> ) ENGINE=InnoDB;
> 
> CREATE TABLE `table2` (
>   `id` int(11) NOT NULL auto_increment,
>   PRIMARY KEY  (`id`),
> ) ENGINE=InnoDB;
> 
> CREATE TABLE `table3` (
>   `id` int(11) NOT NULL auto_increment,
>   PRIMARY KEY  (`id`),
> ) ENGINE=InnoDB;
> 
> CREATE TABLE `table4` (
>   `id` int(11) NOT NULL auto_increment,
>   PRIMARY KEY  (`id`),
> ) ENGINE=InnoDB;
> 
> 
> CREATE TABLE `rel_1` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_table1` int(11) NOT NULL,
>   `id_table2` int(11) NOT NULL,
>   `id_table3` int(11) default NULL,
>   PRIMARY KEY  (`id`),
>   KEY `id_table1` (`id_table1`),
>   KEY `id_table2` (`id_table2`),
>   KEY `id_table3` (`id_table3`),
> ) ENGINE=InnoDB;
> 
> ALTER TABLE `rel_1`
>   ADD CONSTRAINT `rel_1_ibfk_1` FOREIGN KEY (`id_table1`) REFERENCES
> `table1` (`id`),
>   ADD CONSTRAINT `rel_1_ibfk_2` FOREIGN KEY (`id_table2`) REFERENCES
> `table2` (`id`),
>   ADD CONSTRAINT `rel_1_ibfk_3` FOREIGN KEY (`id_table3`) REFERENCES
> `table3` (`id`);
> 
> CREATE TABLE `rel_2` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_table1` int(11) NOT NULL,
>   `id_table4` int(11) NOT NULL,
>   PRIMARY KEY  (`id`),
>   KEY `id_table1` (`id_table1`),
>   KEY `id_table4` (`id_table4`)
> ) ENGINE=InnoDB;
> 
> ALTER TABLE `rel_2`
> 	ADD CONSTRAINT `rel_2` FOREIGN KEY (`id_table4`) REFERENCES `table4`
> (`id`),
>  	ADD CONSTRAINT `rel_2` FOREIGN KEY (`id_table1`) REFERENCES `table1`
> (`id`);
> 
> 
> 
> 
> Part of code (simplified):
> 
> 
> mysql_query("SET AUTOCOMMIT=0; BEGIN;");
> mysql_query("INSERT INTO table1 (test) VALUES ('test');
> if (mysql_errno()) {
> 	$error = 1;
> 	echo "ERROR__1<br>";
> }
> else {
> 	mysql_query("SET @id_last_table1=LAST_INSERT_ID();");
> 	$query1 = "INSERT INTO rel_1 (id_table2, id_table1) VALUES
> (".$_POST['idtable2'].", @id_last_table1 );";
> 	$query2 = "INSERT INTO rel_2 (id_table4, id_table1) VALUES
> (".$_POST['idtable4'].", @id_last_table1 );";
> 
> 	$query = $query1.$query2;
> 	mysql_query($query);
> 	if (mysql_errno() || $error==1) {
> 		mysql_query("ROLLBACK");
> 	 	echo "ERROR_2.<br>";
> 	}
> 	else { mysql_query("COMMIT"); }
> 
> 
> 
> 
> 
> 
> -- 
> 
> 
> Marga Vilalta
> marga at ayuken dot com
> 
> Hov ghajbe'bogh ram rur pegh ghajbe'bogh jaj
> 
> -- 
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php 
> 
> --
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux