2024年PHP开发者大会日本站

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()一起使用。

参见

添加注释

用户贡献的注释 4条注释

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[row][field]
$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 将从 April 的行开始。
saeed at photobookworldwide dot com
13 年前
在这里,您可以轻松找到所选行的当前指针。

<?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年前
致 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)
To Top