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


Return MYSQL Array from PHP to Javascript via a XHR Request

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,而且通常什么都没有。

怎么能用最老套的方式做到这一点呢?

首先,出了什么问题:

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']);
  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注入攻击

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

您的数据没有经过净化,并且对sql注入开放

mysql_fetch_array($result, MYSQL_NUM)不返回关联的数组,请指定MYSQL_ASSOC或使用mysql_fetch_assoc

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

不鼓励使用mysql_*扩展名。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关常见问题解答以了解更多信息。

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

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

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