在 PHP 中,mysql_fetch_row 函數(shù)可以用來從 MySQL 查詢結果集中取回一行作為一個數(shù)組。但是如果使用不當,可能會導致段錯誤(Segmentation fault)。
// 假設 $link 是連接數(shù)據(jù)庫的資源 $result = mysql_query("SELECT * FROM mytable", $link); while ($row = mysql_fetch_row($result)) { // ... } mysql_free_result($result);
在上面的代碼中,如果查詢返回的行數(shù)非常大,循環(huán)會執(zhí)行很長時間,每次調用 mysql_fetch_row 函數(shù)時都會將行數(shù)加一。當加到一定數(shù)量后,$row 變量會被覆蓋掉,可能指向非法內存地址,導致程序崩潰。
避免這種情況發(fā)生的方法是,在循環(huán)體內部對 $row 變量進行拷貝:
// 假設 $link 是連接數(shù)據(jù)庫的資源 $result = mysql_query("SELECT * FROM mytable", $link); while ($row = mysql_fetch_row($result)) { $myrow = $row; // ... } mysql_free_result($result);
這樣每次循環(huán)都會將 $row 拷貝到 $myrow 中,而不會直接修改 $row 變量指向的內存地址。從而避免了段錯誤的發(fā)生。