mysql_data_seek

(PHP 4, PHP 5)

mysql_data_seek移动内部结果指针

警告

此扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0 中被移除。应改用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL: 选择 API 指南。此函数的替代方法包括

描述

mysql_data_seek(资源 $result, 整数 $row_number): 布尔值

mysql_data_seek() 将与指定结果标识符关联的 MySQL 结果的内部行指针移动到指向指定行号的位置。对 MySQL 获取函数(例如 mysql_fetch_assoc())的下次调用将返回该行。

row_number 从 0 开始。 row_number 应该是在 0 到 mysql_num_rows() - 1 之间的某个值。但是,如果结果集为空 (mysql_num_rows() == 0),则对 0 进行查找将以 E_WARNING 失败,并且 mysql_data_seek() 将返回 false

参数

result

正在评估的结果 资源。此结果来自对 mysql_query() 的调用。

row_number

新结果指针的目标行号。

返回值

成功时返回 true,失败时返回 false

示例

示例 #1 mysql_data_seek() 示例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'无法连接: ' . mysql_error());
}
$db_selected = mysql_select_db('sample_db');
if (!
$db_selected) {
die(
'无法选择数据库: ' . mysql_error());
}
$query = 'SELECT last_name, first_name FROM friends';
$result = mysql_query($query);
if (!
$result) {
die(
'查询失败: ' . mysql_error());
}
/* 按相反顺序获取行 */
for ($i = mysql_num_rows($result) - 1; $i >= 0; $i--) {
if (!
mysql_data_seek($result, $i)) {
echo
"无法定位到行 $i: " . mysql_error() . "\n";
continue;
}

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

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

mysql_free_result($result);
?>

注释

注意:

函数 mysql_data_seek() 只能与 mysql_query() 结合使用,而不能与 mysql_unbuffered_query() 结合使用。

另请参阅

添加注释

用户贡献的注释 6 个注释

kennethnash1134 at yahoo dot com
20 年前
/*这是一个将 MySQL 结果行集转换为二维数组的不错函数,如果您需要从多行获取少量数据,这是一个省时的函数,它可以帮您省去许多查询……如果在 PHP 的未来版本中内置了这个函数就好了 :) */

//简单的示例查询
$r=mysql_query("select user,id,ip from accounts limit 10");

//开始 for 循环,使用 mysql_num_rows() 来统计总
//由 $r 返回的行数
for($i=0; $i<mysql_num_rows($r); $i++){
//在 MySQL 资源 $r 中前进一行
mysql_data_seek($r,$i);
//分配数组键,$users[行][字段]
$users[$i]=mysql_fetch_row($r);
}

//很简单,希望有人可以用得上 :)
// -Kenneth Nash
arturo_b at hotmail dot com
19 年前
您好,对于那些是 PHP 新手并且想要了解此函数的人来说,此脚本很容易理解。

表 "user" 有 2 列 "id" 和 "name"。
"user" 内容
位置 0: "id"=195342481 "name"='Arthur'
位置 1: "id"=179154675 "name"='John'
>>位置 2<<: "id"=157761949 "name"='April' >>第三行<<
位置 3: "id"=124492684 "name"='Tammy'
位置 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>";
?>

解释
mysql_data_seek 将内部结果指针移动到 user 表的第三行。因此 mysql_fetch_row 将从四月开始?行。
saeed at photobookworldwide dot com
12 年前
在这里,您可以轻松找到所选行的当前指针

<?php
// 选择 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;
}


}

// 所选行的当前指针
echo $pointer;
?>
b.steinbrink at g m x dot de
19 年前
to kennethnash1134 at yahoo dot com

您的循环也可以这样完成,我认为这更快

$r=mysql_query("select user,id,ip from accounts limit 10");

unset($users); // 为了确保
while($users[] = mysql_fetch_row);
array_pop($users); // 删除最后一个条目,它是 FALSE
Daniel
15 年前
这是一个简单的函数,用于“窥视”查询结果中内部指针的位置

<?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;

// 将指针返回到原始位置
if($pointer_position <= $num_rows - 1) {
mysql_data_seek($result_set, $pointer_position);
}
return
$pointer_position;
}
?>
匿名
18 年前
关于“资源”数据类型的有用说明。

由于“资源”变量在任何给定时间都指向结果集中的某一行,因此您可以将其视为每次传递或将其分配给变量时按引用传递给该函数。

<?

$sql = "SELECT * from <table>";
$result = mysql_query($sql);
$temp_result = $result;

while ($row = mysql_fetch_assoc($temp_result)) {
// 对 $row 执行操作
}

while ($row = mysql_fetch_assoc($result)) {
// 此代码永远不会运行,因为“资源”变量指向结果集的末尾,
// 即使它 *没有* 按引用分配给 $result2。
}

?>

因此,以下片段在功能上是相同的

<?

// 开始片段 1

$sql = "SELECT * from <table>";
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
// 对 $row 执行操作
}

mysql_data_seek($result, 0);

while ($row = mysql_fetch_assoc($result)) {
// 对 $row 执行其他操作
}

// 开始片段 2

$sql = "SELECT * from <table>";
$result = mysql_query($sql);
$temp_result = $result;

while ($row = mysql_fetch_assoc($temp_result)) {
// 对 $row 执行操作
}

mysql_data_seek($result, 0);

while ($row = mysql_fetch_assoc($temp_result)) {
// 对 $row 执行其他操作
}

?>
To Top