2013-04-07 78 views
0

的FETCH_ASSOC方法使用array_map說我有下面的代碼:上的MySQLi查詢

$mysqli=new MySQLi('localhost', 'blah', 'blah', 'blah'); 
$articles=$mysqli->query("SELECT * FROM `articles`"); 
$articles_row=array_map('stripslashes', $articles->fetch_assoc()); 

我會得到一個消息,說「參數2預計數組」。

以這種方式使用array_map被認爲是不好的做法,爲什麼?爲什麼會出現錯誤?

+1

從你有什麼看來,你的查詢沒有返回結果。儘管如此,你爲什麼要在數據庫的結果上運行'stripslashes'呢? – Jon 2013-04-07 22:56:42

+0

因爲,如果我用$ mysqli-> real_escape_string()將它們轉義出來,它似乎會添加反斜槓。它會發生,如果它返回多行。 – 2013-04-07 23:01:41

+0

如果該函數在數據庫中添加了斜槓,那很可能意味着您啓用了[Magic Quotes](http://php.net/manual/en/security.magicquotes.php) - 您要確保這些功能是禁用的。 ^^ – Jon 2013-04-07 23:05:19

回答

0

試試這個,記住要存儲你的數據。

$mysqli=new MySQLi('localhost', 'blah', 'blah', 'blah'); 
if ($result=$mysqli->query("SELECT * FROM `articles`")){ 
    if ($result->num_rows >= 1){ 
    $articles = array() ; //Create a storage 
    while($article = $result->fetch_assoc()){ 
     $articles[] = array_map("stripslashes", $article) ; //Call the function for each row 
    } 
    } else 
    echo "No rows" ; 
} else 
    echo "Fail query" ; 
0

您不應該對從數據庫獲取的數據應用任何反斜槓。
你不應該在第一個地方添加它們。

看來您正在使用準備好的語句,這使得轉義無用。並因此獲得數據庫中的數據轉義(這是錯誤的)。

因此,只是不要使用$mysqli->real_escape_string()對通過準備好的語句添加的數據進行處理,而且您不需要使用任何stripslashes。