首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL mysql_fetch_lengths() 取得欄位長度陣列實戰

     編輯:PHP 相關知識

函數用途

mysql_fetch_lengths(resource $result) 返回剛抓取那一行(由 mysql_fetch_row/assoc/array/object 取得)每個欄位的位元組長度陣列,索引對應欄位順序。

返回值

  • 成功:數值陣列,如 [7, 7, 9, 2]
  • 失敗/無當前行:false

實戰範例

<?php
$sql = "SELECT id, name, email, status FROM users WHERE status = 1";
$result = mysql_query($sql);

$row = mysql_fetch_row($result);
$lengths = mysql_fetch_lengths($result);

echo "原始資料: ";
print_r($row);
echo "位元組長度: ";
print_r($lengths);

/* 輸出範例
原始資料: Array ( [0] => 1001 [1] => John [2] => john@example.com [3] => 1 )
位元組長度: Array ( [0] => 4 [1] => 4 [2] => 16 [3] => 1 )
*/
?>

應用場景

1. 資料截斷檢測

<?php
// 假設 name 欄位定義 VARCHAR(20)
while ($row = mysql_fetch_assoc($result)) {
    $lengths = mysql_fetch_lengths($result);
    if ($lengths[1] > 20) {
        error_log("資料截斷風險: user_id={$row['id']}, name長度={$lengths[1]}");
    }
}
?>

2. 固定寬度匯出格式化

<?php
while ($row = mysql_fetch_row($result)) {
    $lengths = mysql_fetch_lengths($result);
    $line = '';
    foreach ($row as $i => $val) {
        $line .= str_pad($val, $lengths[$i] + 2, ' ', STR_PAD_RIGHT);
    }
    fwrite($fp, $line . "\n");
}
?>

3. 二進位資料驗證

<?php
$row = mysql_fetch_row($result); // 含 BLOB 欄位
$lengths = mysql_fetch_lengths($result);
if ($lengths[2] !== strlen($row[2])) {
    die("BLOB 欄位長度不符,可能資料損壞");
}
?>

注意事項

  • 必須緊接在 mysql_fetch_* 之後呼叫,否則返回 false
  • 長度為位元組數,非字元數(UTF-8 中文佔 3 位元組)
  • NULL 值長度為 0

遷移對照

擴展替代方案
mysqlimysqli_fetch_lengths($result)
PDO無直接對應,需自行 strlen($row[$col]) 計算
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved