我如何使用json_encode()函数与MySQL查询结果?我是否需要遍历这些行,或者我可以将其应用到整个结果对象?


当前回答

我的简单修复,以阻止它把语音标记周围的数值…

while($r = mysql_fetch_assoc($rs)){
    while($elm=each($r))
    {
        if(is_numeric($r[$elm["key"]])){
                    $r[$elm["key"]]=intval($r[$elm["key"]]);
        }
    }
    $rows[] = $r;
}   

其他回答

我们可以这样简化Paolo Bergantino的答案

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));

使用FOR循环的另一个选项:

 $sth = mysql_query("SELECT ...");
 for($rows = array(); $row = mysql_fetch_assoc($sth); $rows[] = $row);
 print json_encode($rows);

唯一的缺点是循环for比while或特别是foreach慢

抱歉,这是在问题之后很长一段时间,但是:

$sql = 'SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]") 
AS json 
FROM users;'
$msl = mysql_query($sql)
print($msl["json"]);

基本上:

"SELECT" Select the rows    
"CONCAT" Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT" Returns a string with concatenated non-NULL value from a group

http://www.php.net/mysql_query说“mysql_query()返回一个资源”。

http://www.php.net/json_encode说它可以编码任何值,“除了资源”。

您需要在数组中遍历和收集数据库结果,然后对数组进行json_encode。

$sth = mysqli_query($conn, "SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

函数json_encode需要PHP >= 5.2和PHP -json包-正如这里提到的

注意:mysql在PHP 5.5.0已弃用,请使用mysqli扩展http://php.net/manual/en/migration55.deprecated.php。