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 ) */ ?>
<?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]}");
}
}
?>
<?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");
}
?>
<?php
$row = mysql_fetch_row($result); // 含 BLOB 欄位
$lengths = mysql_fetch_lengths($result);
if ($lengths[2] !== strlen($row[2])) {
die("BLOB 欄位長度不符,可能資料損壞");
}
?>
mysql_fetch_* 之後呼叫,否則返回 falseNULL 值長度為 0| 擴展 | 替代方案 |
|---|---|
| mysqli | mysqli_fetch_lengths($result) |
| PDO | 無直接對應,需自行 strlen($row[$col]) 計算 |