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']);
SHOW COLUMNS FROM {$table}
mysql_fetch_array($result)
$arr[] = $row['Field'];
- 根本不需要使用
$i
"json"
不是必需的mysql_*
函数已弃用,请改用mysqli/PDO- 您的脚本中存在安全问题。请转义
$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);
});
});