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

PHP から配列を取得し、$arrそれを javascript に渡して、その内容を 1 つずつ印刷できるようにします。これまでのところ、私が持っているコードとそのバリエーションは、エラー、リソース ID を返しましたが、多くの場合、何も返しませんでした。

これは、最も陳腐な方法でどのように行うことができますか?

4

4 に答える 4

2

クエリ$tableで文字列として引用する必要があります。

データはサニタイズされておらず、SQL インジェクションにさらされています

mysql_fetch_array($result, MYSQL_NUM)関連する配列を返さないか、MYSQL_ASSOC代わりに指定するか、代わりに使用mysql_fetch_assocします。

の必要はありません。配列の末尾に項目を追加するために$i使用できます$arr[] = $row['COLUMN_NAME'];

mysql_* 拡張機能の使用はお勧めできません。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL: APIガイドの選択および関連する FAQも参照してください。

$("#verticalSelect").val()選択した値の選択要素を取得するために使用できます。

于 2012-09-03T21:41:19.060 に答える
2
  1. SHOW COLUMNS FROM {$table}
  2. mysql_fetch_array($result)
  3. $arr[] = $row['Field'];
  4. 使用する必要はまったくありませ$i
  5. "json"必要ありません
  6. mysql_*関数は非推奨です。代わりに mysqli/PDO を使用してください。
  7. スクリプトにセキュリティ上の問題があります。$tableSQL インジェクション攻撃を防ぐためにエスケープしてください。
于 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 に答える
1

jqueryを使用しているように見えるので、getjsonメソッドを使用してください。また、データを要求しているだけなので、もちろんデータが非常に大きい場合を除き、REST の原則に従い、POST ではなく GET を使用することをお勧めします。これは、キャッシュが必要な場合に役立ち、リソースに簡単にアクセスできます。

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