mysql_data_seek

(PHP 4, PHP 5)

mysql_data_seekDéplace le pointeur interne de résultat MySQL

Avertissement

Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur. À la place, les extensions MySQLi ou PDO_MySQL doivent être utilisées. Voir aussi le guide MySQL : choix de l'API ainsi que la FAQ associée pour plus d'information. Voici les alternatives à cette fonction :

Description

bool mysql_data_seek ( resource $result , int $row_number )

mysql_data_seek() déplace le pointeur interne de résultat, dans le résultat associé à l'identifiant de résultat result_identifier. Il le fait pointer à la ligne row_number. Le prochain appel à une fonction MySQL de récupération de données, comme la fonction mysql_fetch_assoc() retournera cette ligne.

row_number commence à 0. row_number doit être une valeur qui va de 0 à mysql_num_rows() - 1. Cependant, si le résultat est vide, un row_number de 0 échouera avec une erreur E_WARNING et mysql_data_seek() retournera FALSE.

Liste de paramètres

result

La ressource de résultat qui vient d'être évaluée. Ce résultat vient de l'appel à la fonction mysql_query().

row_number

La position de la ligne désirée pour le nouveau pointeur de résultats.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec mysql_data_seek()

<?php
$link 
mysql_connect('localhost''mysql_user''mysql_password');
if (!
$link) {
    die(
'Connexion impossible : ' mysql_error());
}
$db_selected mysql_select_db('sample_db');
if (!
$db_selected) {
    die(
'Sélection de base de données impossible : ' mysql_error());
}
$query 'SELECT nom_famille, prenom FROM amis';
$result mysql_query($query);
if (!
$result) {
    die(
'Requête échec : ' mysql_error());
}
/* Récupération des lignes en ordre inverse */
for ($i mysql_num_rows($result) - 1$i >= 0$i--) {
    if (!
mysql_data_seek($result$i)) {
        echo 
"Ne peut pointer vers la ligne $i : " mysql_error() . "\n";
        continue;
    }

    if (!(
$row mysql_fetch_assoc($result))) {
        continue;
    }

    echo 
$row['nom_famille'] . ' ' $row['prenom'] . "<br />\n";
}

mysql_free_result($result);
?>

Notes

Note:

La fonction mysql_data_seek() peut être utilisée en conjonction avec mysql_query(), mais pas avec la fonction mysql_unbuffered_query().

Voir aussi

add a note add a note

User Contributed Notes 6 notes

up
0
Daniel
6 years ago
Here is a simple function to "peek" at the position of the internal pointer in a query result:

<?php
function mysql_pointer_position($result_set) {
       
$num_rows = mysql_num_rows($result_set);
       
$i = 0;
        while(
$result = mysql_fetch_array($result_set)) {
           
$i++;
        }
       
$pointer_position = $num_rows - $i;

//Return pointer to original position
       
if($pointer_position <= $num_rows - 1) {
           
mysql_data_seek($result_set, $pointer_position);
        }
        return
$pointer_position;
    }
?>
up
0
arturo_b at hotmail dot com
9 years ago
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 aprils row.
up
0
b.steinbrink at g m x dot de
9 years ago
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
up
0
kennethnash1134 at yahoo dot com
10 years ago
/*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
up
-1
saeed at photobookworldwide dot com
2 years ago
Here, you can find the current pointer of selected row easily:

<?php
//selected row with id=4
$id    =    "4";

$result    =    mysql_query("select * from jos_components");

$num    =    mysql_num_rows($result);

for(
$i=0;$i<$num;$i++){
   
   
mysql_data_seek($result,$i);

   
$row    =    mysql_fetch_assoc($result);
   
    if(
$row['id']    ==    $id){
       
       
$pointer    =    $i;
    }


}

// current pointer for selected row
echo $pointer;
?>
up
-2
Anonymous
8 years ago
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
}

?>
To Top