0

次の情報テーブルを使用して作成したばかりのテーブルを含むデータベース あります このテーブルに。print_r($stuff) すると、次のようになります。

Array
(
[0]=> Array
  (
    [nut]=> Protein
    [amt]=> 0.85
    [units]=> g
   )
[1]=> Array
  (
    [nut]=> Energy
    [amt]=> 717
    [units]=> kcal
   )
etc.
)

接続は $db という名前の PDO オブジェクトであり、これは、配列を挿入するために使用して失敗したさまざまなバリエーションの 1 つです。

foreach ($stuff as $row){
  $nut = $row['nut'];
  $amt = $row['amt'];
  $units = $row['units'];
  $query= "insert into rec_nutr (nutrDesc, nutr_ttl,units)values ($nut,$amt,$units)"; 

  $statement= $db->exec($query);

} 

これを実行すると、エラー メッセージは表示されませんが、情報はテーブルに挿入されません。

私もこのステートメントを使用してみました

  $stmt = $db->prepare("INSERT INTO rec_nutr(nutrDesc, nutr_ttl,units) VALUES ( ?, ?, ?)");
  foreach($stuff as $row) {
      $stmt->execute(array( $row['nut'],$row['amt'],$row['units']));
  }

しかし、再び運が悪い

注: 配列は、JSON を使用して Web ページから取り出され、JSON_decode を使用してデコードされました。次に、print_r($stuff) を使用して配列を確認しました。文字列として入ってくる場合に備えて、amt で floatvar() を使用しようとしましたが、それは役に立たなかったようです。挿入時にエラー メッセージが表示されるかどうかを確認するために追加できるものはありますか?

4

2 に答える 2

0

文字列値は引用符で囲む必要があります:

$query= "insert into rec_nutr (nutrDesc, nutr_ttl,units) values ('$nut',$amt,'$units')";

PDO を使用する場合は、準備済みステートメントとバインディング パラメーターを調べる必要があります。値が正しく入力されていることを確認し、SQL インジェクションから保護するのに非常に役立ちます。上記のコードは、$stuff信頼されていない入力である場合、SQL インジェクションに対して脆弱です。

于 2013-11-04T19:59:16.747 に答える
0

データベースへのログオンに使用していたユーザーにのみ SELECT 権限を与えていたことに気付きました!

ご協力いただきありがとうございます。

于 2013-11-04T20:38:18.897 に答える