0

私に似た多くの投稿がありますが、どれも機能しません。

配列を持ってい$data['date'], $data['name'], $data['value']ます。

MySQL テーブル MyValues (日付、名前、値) に挿入しようとしています

7 ~ 8 種類の方法を試しましたが、どれも機能しませんでした。次のようなものが欲しい

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO MyValues('Date','Index_Name','Index')
       VALUES ($data['date'][$a] ,$data['name'][$a], $data['value'][$a])"
}

また、foreach を試したり、MySQL に渡す単一の文字列を作成したりしました。

このエラーを取得します 警告: mysql_error() は、パラメーター 1 がリソースであると想定しています。

4

6 に答える 6

3

columnName は文字列リテラルではなく識別子であるため、一重引用符で囲むことはできません。

INSERT INTO `Values` (Date,Index_Name,Index) VALUES (....)

もう 1 つ、バッククォートでラップする必要がある唯一の識別子は tableNameVALUESです。これは予約済みのキーワードであるためです。

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-02-01T17:48:49.167 に答える
0

これを試してください、使用し$a++ないでください$ee++

    for ($a=0;$a<10;$a++) {
mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`)
   VALUES ('".$data['date'][$a]."' ,'".$data['name'][$a]."', '".$data['value'][$a]."' ")
 }
于 2013-02-01T18:14:49.733 に答える
0

は予約語のためValues、テーブル名としてそのまま使用することはできません。バッククォートを使用して囲む必要があります。同様に、単一引用符を使用して列に名前を付けることは有効ではありません。バッククォートも必要です。

これを試して:

$out = Array();
$esc = "mysql_real_escape_string";
foreach($data['date'] as $k=>$v) {
    $out[] = "('".$esc($data['date'][$k])."', '".$esc($data['name'][$k])."', "
       ."'".$esc($data['value'][$k])."')";
}
mysql_query("INSERT INTO `Values` (`Date`, `Index_Name`, `Index`) values ".implode(",",$out));
于 2013-02-01T17:51:02.327 に答える
-1

まず第一に、準備済みステートメントで PDO/mysqli を使用するだけで、このような問題が発生することはありません。

ただし、これで解決します(一重引用符の代わりにバックティックを使用した列名、およびエスケープされたデータ):

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`)
       VALUES ('".mysql_real_escape_string($data['date'][$a])."' ,
'".mysql_real_escape_string($data['name'][$a])."', 
'".mysql_real_escape_string($data['value'])[$a]."'");
}

indexまた、 や などの列の予約名は避けてくださいvalues

于 2013-02-01T17:48:10.723 に答える
-1

まず、クエリ値を引用したいので、結果は単なる値ではなく「値」になります。例:

mysql_query("INSERT INTO Values(Date,Index_Name,Index) VALUES ('$data['date'][$a]' ,'$data['name'][$a]', '$data['value'][$a]');

複数のクエリを実行している場合は、次のようにします。

$q = "INSERT INTO Values(Date,Index_Name,Index) VALUES ";
for {
  // Add to the string here for each insert item
}
mysql_query($q);

さらに、mysqli または PDO を優先して、PHP の mysql_* ライブラリの段階的廃止を開始してください。

于 2013-02-01T17:48:56.723 に答える
-2

これは機能します:

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO Values('Date','Index_Name','Index')
    VALUES ('".$data['date'][$a]."','".$data['name'][$a]."','".$data['value'][$a]."')"
}
于 2013-02-01T17:49:35.370 に答える