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并且通常一无所获。
如何以最直接的方式做到这一点?
答案 0 :(得分:2)
SHOW COLUMNS FROM {$table}
mysql_fetch_array($result)
$arr[] = $row['Field'];
$i
"json"
没有必要mysql_*
函数已弃用,请改用mysqli / PDO。 $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_ *扩展名。相反,应使用MySQLi或PDO_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);
});
});