PHP Conference Japan 2024

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(resource $result, int $row_number): bool

mysql_data_seek() 將與指定結果識別碼關聯的 MySQL 結果的內部列指標移動到指定的列號。下一次呼叫 MySQL 提取函式(例如 mysql_fetch_assoc())將會傳回該列。

row_number 從 0 開始。row_number 應該是 0 到 mysql_num_rows() - 1 範圍內的值。但是,如果結果集為空 (mysql_num_rows() == 0),則搜尋到 0 將會失敗,並產生 E_WARNINGmysql_data_seek() 將會傳回 false

參數

result

正在評估的結果 resource。此結果來自對 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 筆筆記

6
kennethnash1134 at yahoo dot com
20 年前
/*這裡有一個很棒的函式,可將 mysql 結果列集轉換為 2d 陣列,如果需要來自多列的小型資料,可以節省時間,無需執行大量的查詢...如果可以在 PHP 未來的版本中內建會很好 :) */

// 簡單範例查詢
$r=mysql_query("select user,id,ip from accounts limit 10");

//開始 for 迴圈,使用 mysql_num_rows() 來計算 $r 傳回的總列數
//由 $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
2
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 將內部結果指標移動到使用者表格的第三列。因此,mysql_fetch_row 將從 april 的列開始。
1
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;
?>
-2
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