|
mysql_data_seek
Move internal result pointer
(PHP 4, PHP 5, PECL mysql:1.0)
Example 1419. mysql_data_seek() example<?php Code Examples / Notes » mysql_data_seekb.steinbrink
to kennethnash1134 at yahoo dot com your loop can be done like this as well and i guess this is faster: $r=mysql_query("select user,id,ip from accounts limit 10"); unset($users); // Just to be sure while($users[] = mysql_fetch_row); array_pop($users); // Drop the last entry which is FALSE justus dot brugman
So you can use it as the equivalent of the reset() call for an array. eg. while ($row = mysql_fetch_object($result_01)) { // code goes here while ($row = mysql_fetch_object($result_02)) { // code goes here. } mysql_data_seek($result_02,0) } Still hoping that there is going to be a better way, like mysql_reset($result). guy gordon
I needed to "peek" at the next record in order to see if fetching it would go too far. So I want to do a fetch, followed by seek(-1). I could find no function to move the internal row pointer relative to it's current position, or to retrieve it as a row number as required by mysql_data_seek(). This limits the function's usefulness to resetting the row to 0, unless you track the row number yourself. If you use a While loop to step through the results, you can increment a tracking index at the bottom of the loop. But be sure never to use Continue; which would bypass your index. And document this restriction for the person who needs to maintain your code. It's probably better to use a For loop, which makes the index explicit. In either case be sure to range check the index when you manipulate it. E.G. When I "peek" at the next record I must check for index>=count (end of data). Or if I decrement the index, make sure it does not go negative. Again, document why you are coding it this way, so the next programmer doesn't "correct" the inelegant code. arturo_b
hello, this script would be easy to understand for those that are novice in php whose want to understand about this function: the table "user" have 2 columns "id" and "name". "user" content: position 0: "id"=195342481 "name"='Arthur' position 1: "id"=179154675 "name"='John' >>position 2<<: "id"=157761949 "name"='April' >>third row<< position 3: "id"=124492684 "name"='Tammy' position 4: "id"=191346457 "name"='Mike' <?php mysql_connect("localhost", "root") mysql_select_db("test"); $sql = mysql_query("select * from user"); mysql_data_seek($sql, 2); echo "<table border=1>"; while ($row = mysql_fetch_row($sql)){ echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>"; } echo "</tabla>"; ?> explanation: mysql_data_seek move internal result pointer to the third row of table user. Thus mysql_fetch_row will begin by april´s row. 30-may-2006 09:52
A helpful note about the 'resource' data type. Since the 'resource' variable is pointing to a row in a result set at any given time, you can think of it as being passed to this function by reference every time you pass it or assign it to a variable. <? $sql = "SELECT * from <table>"; $result = mysql_query($sql); $temp_result = $result; while ($row = mysql_fetch_assoc($temp_result)) { // do stuff with $row } while ($row = mysql_fetch_assoc($result)) { // This code will never run because the 'resource' variable is pointing past the end of the result set, // even though it was *not* assigned by reference to $result2. } ?> Therefore, the following snipits are functionally identical: <? // Start snipit 1 $sql = "SELECT * from <table>"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { // do stuff with $row } mysql_data_seek($result, 0); while ($row = mysql_fetch_assoc($result)) { // do other stuff with $row } // Start snipit 2 $sql = "SELECT * from <table>"; $result = mysql_query($sql); $temp_result = $result; while ($row = mysql_fetch_assoc($temp_result)) { // do stuff with $row } mysql_data_seek($result, 0); while ($row = mysql_fetch_assoc($temp_result)) { // do other stuff with $row } ?> kennethnash1134
/*here is a nice function for converting a mysql result row set into a 2d array, a time saver if need small data from several rows, saves you from having to do Alot of queries... would be nice to have this built into PHP future versions :) */ // simple example query $r=mysql_query("select user,id,ip from accounts limit 10"); //starts the for loop, using mysql_num_rows() to count total //amount of rows returned by $r for($i=0; $i<mysql_num_rows($r); $i++){ //advances the row in the mysql resource $r mysql_data_seek($r,$i); //assigns the array keys, $users[row][field] $users[$i]=mysql_fetch_row($r); } //simple, hope someone can use it :) // -Kenneth Nash jonybd
/* helpfull for real time databases query - Query one time - Retreive data twice from the same query - mysql_data_seek * */ include("p_MySql_Connection.php"); $v_Query = "SELECT f1 from t1"; $v_Result = mysql_query($v_Query, $v_RS); /* First loop for one single query */ while ($row = mysql_fetch_array($v_Result,MYSQL_NUM)) { $v_total = $v_total + $row[1]; } echo $v_total; /* Retreive data */ $v_Re = mysql_data_seek($v_Result,0); if (!$v_Re){ echo 'MySql data seek Error' . mysql_error(); } /* Second loop for one single query */ while ($row = mysql_fetch_array($v_Result,MYSQL_NUM)) { echo $row[0]; } |
Change Languagemysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_escape_string mysql_fetch_array mysql_fetch_assoc mysql_fetch_field mysql_fetch_lengths mysql_fetch_object mysql_fetch_row mysql_field_flags mysql_field_len mysql_field_name mysql_field_seek mysql_field_table mysql_field_type mysql_free_result mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_real_escape_string mysql_result mysql_select_db mysql_set_charset mysql_stat mysql_tablename mysql_thread_id mysql_unbuffered_query |