json_encode一个MySQL表和urldecode每一行

时间:2014-01-10 07:48:01

标签: javascript php mysql json

这就是我得到的。我有一个MySQL表,在这种情况下'业务'有很多行urlencode()数据。我试图使用PHP脚本(getTable.php)来获取每行的urldecode()表,然后使用json_encode将数据作为数组发送回javascript。这是我到目前为止所拥有的。

$table = $_GET['table'];    
$query = "SELECT * FROM $table";
$jsonOut = array();
while($result = mysql_fetch_array(mysql_query($query))) 
{
    foreach($result as &$value) 
     {
      $value = urldecode($value);
     }
$jsonOut[] = $result;
}
echo (json_encode($jsonOut));

显然,我做错了什么,因为我造成了一个无限循环,没有任何东西最终起作用。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

这是你所谈论的无限循环

while($result = mysql_fetch_array(mysql_query($query)))

尝试

$recordset=mysql_query($query);
while($result = mysql_fetch_array($recordset)){
}

注意:MySQL API早已被弃用,在您被迫

之前,最好远离它

答案 1 :(得分:1)

试试这段代码:

$table = $_GET['table'];    
$query = "SELECT * FROM $table";
$jsonOut = array();
$result = mysql_query($query);
while($result = mysql_fetch_array($result)) 
{
    $jsonOut[] = $result;
}
echo (json_encode($jsonOut));

实际上,查询必须只执行一次,而不是每次while循环的迭代执行一次,否则你最终会得到一个无限循环!

另外,作为旁注,您应该避免使用mysql_*功能,因为它们现已弃用,如果可以,请尝试切换到PDO

编辑:

如果您需要每行urldecode,请替换

$jsonOut[] = $result;

$jsonOut[] = array_map('urldecode', $result);

while循环内。

答案 2 :(得分:0)

你应该这样做:

$query = mysql_query($query);
while($result = mysql_fetch_array($query)) {

答案 3 :(得分:0)

您可以使用以下代码检索和解码参数。 (基于@Matteo Tassinari的回答)

$table = $_GET['table'];
//This could be a SQL injection
$query = "SELECT * FROM " . mysql_real_escape_string($table);

$jsonOut = array();
$result = mysql_query($query);

while($result = mysql_fetch_array($result)) 
{
    $newArray = array();

    foreach ($result as $k => $v) {
        $newArray[$k] = urldecode($v);
    }
    $jsonOut[] = $newArray;
}

echo (json_encode($jsonOut));