我工作的一個相當大的項目,其中有很多的地方,如下面的代碼存在:它真的檢查PHP中的每個數組索引有多重要?
function foo($a, $b, $c, $d, $e, $f) {
$clean = array();
$mysql = array();
$clean['a'] = htmlentities($a);
$clean['b'] = htmlentities($b);
$clean['c'] = htmlentities($c);
$clean['d'] = htmlentities($d);
//...
$mysql['a'] = mysql_real_escape_string($clean['a']);
$mysql['b'] = mysql_real_escape_string($clean['b']);
$mysql['c'] = mysql_real_escape_string($clean['c']);
$mysql['d'] = mysql_real_escape_string($clean['d']);
//...
//construct and execute an SQL query using the data in $mysql
$query = "INSERT INTO a_table
SET a='{$mysql['a']}',
b='{$mysql['b']}',
c='{$mysql['c']}',
d='{$mysql['d']}'";
}
顯然,這引發了很多警告在PHP中未定義的指標。
是否真的有必要重寫代碼如下?
function foo($a, $b, $c, $d, $e, $f) {
$clean = array();
$mysql = array();
$clean['a'] = htmlentities($a);
$clean['b'] = htmlentities($b);
$clean['c'] = htmlentities($c);
$clean['d'] = htmlentities($d);
//...
$mysql['a'] = (isset($clean['a'])) ? mysql_real_escape_string($clean['a']) : mysql_real_escape_string($a);
$mysql['b'] = (isset($clean['b'])) ? mysql_real_escape_string($clean['b']) : mysql_real_escape_string($b);
$mysql['c'] = (isset($clean['c'])) ? mysql_real_escape_string($clean['c']) : mysql_real_escape_string($c);
$mysql['d'] = (isset($clean['d'])) ? mysql_real_escape_string($clean['d']) : mysql_real_escape_string($d);
//...
//construct and execute an SQL query using the data in $mysql
if (isset($mysql['a']) and isset($mysql['b']) and isset($mysql['c']) and isset($mysql['d'])) {
$query = "INSERT INTO a_table
SET a='{$mysql['a']}',
b='{$mysql['b']}',
c='{$mysql['c']}',
d='{$mysql['d']}'";
}
}
那麼,如果你真的設置每個'$ clean ['something']`,那麼你就不應該得到通知。順便說一句,你有很多重複。考慮使用循環或`array_map`:http://php.net/manual/en/function.array-map.php – 2011-02-15 17:03:23