0

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");
});

我想$arr从 php 中获取数组并将其传递给 javascript,在那里我可以一一打印它的内容。到目前为止,我拥有的代码及其变体都返回了错误、资源 ID,而且通常什么都没有。

如何以最老套的方式做到这一点?

4

4 回答 4

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 注入攻击。
于 2012-09-03T21:26:00.737 回答
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 注入是开放的。至少,您应该mysql_real_escape_string()在将其添加到 SQL 之前运行该值。

$table = mysql_real_escape_string($_REQUEST['table']);
于 2012-09-03T21:27:23.530 回答
2

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

您的数据未经过清理,并且对 sql 注入开放

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

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

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

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

于 2012-09-03T21:41:19.060 回答
1

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

$.getJSON("scripturl",function(data) {
$.each(data, function(i,item){
    console.log(item);
});
});
于 2012-09-03T21:32:02.633 回答