通过XHR请求将MYSQL数组从PHP返回到Javascript

时间:2012-09-03 21:17:52

标签: php javascript ajax arrays json

PHP

$table = $_REQUEST['table'];

$query  = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = $table";
$result = mysql_query($query);
$i = 0;
$arr = array();
while($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $arr[$i] = $row['COLUMN_NAME'];
    $i++;
}
echo json_encode($arr);

的Javascript

$("#verticalSelect").change(function() {
    var table = $("#verticalSelect option:selected").attr('value');

    $.post(PROCESSORFILE, {"task": "getTableDupeFields", "table": table}, function(data) {
        alert(data);
    }, "json");
});

我想从php获取数组$arr并将其传递给javascript,我可以逐个打印其内容。到目前为止,我所拥有的代码和变体已经返回错误,资源ID并且通常一无所获。

如何以最直接的方式做到这一点?

4 个答案:

答案 0 :(得分:2)

  1. SHOW COLUMNS FROM {$table}
  2. mysql_fetch_array($result)
  3. $arr[] = $row['Field'];
  4. 无需使用$i
  5. "json"没有必要
  6. mysql_*函数已弃用,请改用mysqli / PDO。
  7. 您的脚本中存在安全问题。请转义$table以防止SQL注入攻击。

答案 1 :(得分:2)

首先,出了什么问题:

while($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $arr[$i] = $row['COLUMN_NAME'];
    $i++;
}

您指定MYSQL_NUM,指示mysql_fetch_array()返回数字数组。设置该标志后,您将访问第一个值$row[0]。要获取关联数组并按名称访问字段,您可以使用mysql_fetch_assoc(),而不是将任何标记传递给mysql_fetch_array(),或将其传递给MYSQL_ASSOC

此外,您正在使用的$i变量是不必要的 - 您可以在不指定索引的情况下将元素附加到数组,如下所示:

 $arr[] = $row['COLUMN_NAME'];

最后,当您将$_REQUEST变量直接插入到sql中时,您的脚本将对SQL注入开放。至少,您应该在将值添加到SQL之前对该值运行mysql_real_escape_string()

$table = mysql_real_escape_string($_REQUEST['table']);

答案 2 :(得分:2)

您的$table需要在查询中作为字符串引用。

您的数据未经过清理,并且可以进行sql注入

mysql_fetch_array($result, MYSQL_NUM)不会返回关联的数组,而是指定MYSQL_ASSOC或改为使用mysql_fetch_assoc

不需要$i,您可以使用$arr[] = $row['COLUMN_NAME'];将项目添加到数组的末尾

  

不鼓励使用mysql_ *扩展名。相反,应使用MySQLiPDO_MySQL扩展名。有关详细信息,另请参阅MySQL: choosing an API指南和related FAQ

您可以使用$("#verticalSelect").val()获取所选值选择元素。

答案 3 :(得分:1)

看起来你使用jquery所以也许使用getjson方法。此外,由于您只是在请求数据,因此最好遵循REST原则并使用GET而不是POST,除非您的数据非常大。如果您需要缓存并允许轻松访问资源,这将有所帮助。

$.getJSON("scripturl",function(data) {
$.each(data, function(i,item){
    console.log(item);
});
});