0

変数に格納されたデータのセットがあり、そのデータをMySQLデータベースに書き込むページが必要です。挿入時刻を含めたいのですが、これが私のメソッドです。

$username="username"; $password="password";


try {
  $pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $stmt = $pdo->prepare('INSERT INTO table01
  (
   Time,
   variable1,
   variable2,
  )

VALUES
  (
    :Time,
    :variable1,
    :variable2,
  )');


  $stmt->execute(array(
        ':Time' => NOW(),
        ':variable1' => $var1,
        ':variable2' => $var2,
  ));

  echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
  echo 'Error: ' . $e->getMessage();
}

このページをロードすると、cssがページから削除され、ページがどのように表示されるか(白い画面、一部の画像のプレーンテキスト)の文字化けした出力が表示されます。さらに、データベースをチェックすると、何も書き込まれていません。

そこにTime変数がないと、すべてが完全に機能します。

何かアドバイス?前もって感謝します

4

1 に答える 1

4

申し訳ありませんが、それを読み直すのに少し時間がかかりました。nysql関数now()を使用して作業を行っているため、これをparamとして設定する必要がないため、バインドする必要はまったくありません。クエリに書き込むだけです。

  $stmt = $pdo->prepare('INSERT INTO table01
  (
   Time,
   variable1,
   variable2,
  )

VALUES
  (
    now(),
    :variable1,
    :variable2,
  )');

  $stmt->execute(array(
    ':variable1' => $var1,
    ':variable2' => $var2,
  ));

コメントを編集

クエリ内の:は、準備されたクエリ内のパラメータとしてそれを示します。つまり、コマンドを使用してバインドする必要bind()があります。ただし、データベース内からデータを挿入する場合(組み込み関数を使用する場合や、別の行からデータをプルする場合など)は、最初のクエリでデータを宣言する必要が:ないため、渡すことはできません。バインドされたparams配列のクエリに。

于 2012-08-20T21:46:27.583 に答える