2013-04-07 91 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。