Re: POST a variable
| From: | Dan Shirah | Date: | Fri, 23 Mar 2007 19:10:15 +0000 |
| Subject: | Re: POST a variable | ||
| References: | 1 2 3 4 5 6 7 8 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-251211@lists.php.net to get a copy of this message | ||
Ah, got it.
Thanks a lot for the help Satyam!
On 3/23/07, Satyam <Satyam@satyam.com.ar> wrote:
It seems to me @@identity should sufice, and it certainly does not need to be any 'new' function, since it had been there for quite a while. My feeling is that those added functions might be used for elaborate stored procedures, where you might be dealing with multiple tables or some fancy administrative uses. You certainly DON'T want any function that gives you the last identity of some other connection! $get_max = "SELECT @@identity"; $max_result = mssql_query($get_max) or die(mssql_error()); $max_id = mssql_fetch_row($max_result); echo $max_id[0]; Though the fetch will return only one record with only one field, it will still return that as an array, even if it only contains one element, so you still need to add the [0]. Unfortunately, PHP doesn't allow the brackets to a function that returns an array. You might use mssql_result instead: $get_max = "SELECT @@identity"; $max_result = mssql_query($get_max) or die(mssql_error()); $max_id = mssql_result($max_result,0,0); echo $max_id; Satyam ----- Original Message ----- From: "Dan Shirah" <mrsquash2@gmail.com> To: "Satyam" <Satyam@satyam.com.ar> Cc: "php-general" <php-general@lists.php.net> Sent: Friday, March 23, 2007 7:48 PM Subject: Re: [PHP] POST a variable Sorry, I was more tailoring my question to the syntax of my query. It wasn't displaying anything for my echo. I've changed it to this now: $get_max = "SELECT scope_identity()"; $max_result = mssql_query($get_max) or die(mssql_error()); $max_id = mssql_fetch_row($max_result); echo "$max_id"; But all my echo returns is "array" instead of the number. Below are brief explanations of the different _identity uses you have. SELECT *@@IDENTITY* Returns the last IDENTITY value produced on a connection, regardless of the table that produced the value, and regardless of the scope of the statement that produced the value. SELECT *IDENT_CURRENT(*'*tablename*'*)* This new function returns the last IDENTITY value produced in a table, regardless of the connection that created the value, and regardless of the scope of the statement that produced the value. SELECT *SCOPE_IDENTITY()* This new function returns the last IDENTITY value produced on a connection and by a statement in the same scope, regardless of the table that produced the value. On 3/23/07, Satyam <Satyam@satyam.com.ar> wrote: I don't really know about the scope_identity() function, neither much about @@identity. I know that the names preceded by @@ are MSSQL internal variables and I think that is the one you are looking for, I just checked in the on-line MS documentation, but have no SQL server active at this moment, nor have I dealt with one for the last few years, though I did use auto-increment fields and I certainly was able to retrieve the last id, somehow. I might be wrong and there might be another function or variable that gives you the value, but it looks to me @@identity is the one you are looking for. There is no need in your code to do any while, if the SQL statement doesn't fail and triggers the die(), you can rest assured you'll get a record with a single field, even if it only contains a null, that's the way with variables, you can't fail on them, though they might return null. Satyam ----- Original Message ----- *From:* Dan Shirah <mrsquash2@gmail.com> *To:* Satyam <Satyam@satyam.com.ar> *Sent:* Friday, March 23, 2007 7:14 PM *Subject:* Re: [PHP] POST a variable Satyam, I'm trying to retrieve the id using the identity method, but I do not get anything returned. Do you see anything wrong with this code? $get_max = "SELECT scope_identity()"; $max_result = mssql_query($get_max) or die(mssql_error()); while($max=mssql_fetch_row($max_result)){} $max_id = $max[0];echo "$max_id"; On 3/23/07, Satyam <Satyam@satyam.com.ar> wrote:Do a 'select @@identity', it will give you the last record id. Thegapin between steps 3 and 4, brief as it may seem, is enough to get you in trouble. Satyam ----- Original Message ----- From: "Dan Shirah" <mrsquash2@gmail.com> To: "Németh Zoltán" < znemeth@alterationx.hu> Cc: "php-general" <php-general@lists.php.net> Sent: Friday, March 23, 2007 4:07 PM Subject: Re: [PHP] POST a variable The reason I have to use it as I posted is because I am usingMicrosoftSQL server instead of MySQL. And I haven't found a php function for MSSQL that works the same as mysql_insert_id() So, to come out with a comparable function with pretty reliableresults,I follow this process: 1. User enters data into form 2. User submits form 3. Save page inserts info into the database 4. Directly after the insert statement is my SELECT MAX query 5. I assign the retrieved value to a hidden field 6. I pass this value to the next form I figure the odds of another record being inserted inbetween the timeittakes to go from step 3 to step 4 are very, very minimal. We'retalkingabout MAYBE a 2-3 millisecond gap? On 3/23/07, Németh Zoltán <znemeth@alterationx.hu> wrote:my2007. 03. 23, péntek keltezéssel 10.45-kor Dan Shirah ezt írta:Okay, I feel like the correct answer to this is about 2mm back inoutgreyinsertedmatter. 1. I have a query that pulls the last row number when a newlyofrecord is added: $maximum="SELECT MAX(payment_id) FROM payment_request"; $max_result=mssql_query($maximum); while($max=mssql_fetch_row($max_result)){ } $max_id = $max[0]; 2. I have multiple selections for the user to pick, but regardlesswhatpage.they choose I want the $max_id variable to be passed to the nextlike3. Would I go about this by assigning $max_id to a hidden fieldbelow?<input type="hidden" value="<?php echo "$max_id"; ?>" size="5" maxlength="10" name="max_id" /> 4. And then to retrieve this value on my next page just get itofat$_POST['max_id'] ?? Does that all sound correct?basically yes but if you want the id of the row you just inserted, using mysql_insert_id() is better because if another insert is happening--------------------------------------------------------------------------------the same time, select max() may give you incorrect result greets Zoltán NémethNo virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.446 / Virus Database: 268.18.17/730 - Release Date: 22/03/2007 7:44------------------------------ No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.446 / Virus Database: 268.18.17/730 - Release Date: 22/03/2007 7:44 -------------------------------------------------------------------------------- No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.446 / Virus Database: 268.18.17/730 - Release Date: 22/03/2007 7:44