0

用語のいずれかがオフになっている場合は申し訳ありません....だから、PHPコードでこのinsertステートメントを使用しようとしています。isqlまたはsqlplusを使用してステートメントを入れると、ステートメントは正常に機能します。しかし、PHP でクエリを実行すると、テーブルに何も挿入されません。エラーを返しません。PHP の PDO 拡張機能を使用しています。http://us2.php.net/manual/en/pdo.prepare.php

INSERT INTO USER_KEY (CREATED_DATE, COMMENT, EXPIRATION_DATE, USER_KEY_ID)
VALUES (SYSTIMESTAMP, NULL, TO_TIMESTAMP
('2012-02-02', 'YYYY-MM-DD'), key_sequence.NEXTVAL);

私のphpコードは次のようになり、CodeIgniterを使用しています

$dbh = self::$CI->db->conn_id;

$sql = "INSERT INTO USER_KEY (CREATED_DATE, COMMENT, EXPIRATION_DATE, USER_KEY_ID) VALUES (SYSTIMESTAMP, ?, TO_TIMESTAMP(?, 'YYYY-MM-DD'), key_sequence.NEXTVAL)";

$stmt = $dbh->prepare($sql);

$stmt->execute(array(NULL,'2012-02-02'));

データベース内のさまざまなテーブルのコードに同様の PHP 挿入ステートメントがあり、それらのステートメントは機能します。しかし、これらのテーブルはタイムスタンプを使用していないので、どういうわけか私のタイムスタンプの使用が、PHP で使用されている挿入ステートメントを台無しにしているのだろうか? また、ステートメントが実行されていないときにエラーが表示されない理由についての説明はありますか?

更新/解決策

だから私はバインディングを行う方法を変更しました

 $sql = INSERT INTO USER_KEY <br>
                    (CREATED_DATE, <br>
                     COMMENT, <br>
                     EXPIRATION_DATE, <br>
                     USER_KEY_ID)  <br>
         VALUES      (SYSTIMESTAMP, <br>
                     :comment,  <br>
                     TO_TIMESTAMP(:date, 'YYYY-MM-DD'), <br>
                     key_sequence.NEXTVAL); <br>

 $stmt = $dbh->prepare($sql); <br>
 $stmt->bindValue(':comment', $this->comment); <br>
 $stmt->bindValue(':date', $this->creation_date); <br>
 $execute(); <br>

 $var_dump($stmt->errorInfo());

この方法でバインディングを行うと、エラーが返されました

ORA-01830: date format picture ends before converting entire input string

TO_TIMESTAMPこのエラーから、入力した日付がSQL ステートメントの関数の形式と一致しないことがわかりました。
http://www.techonthenet.com/oracle/errors/ora01830.php

私はこれを知りませんでしたが、Oracle DD は [1-31] NOT [01-31] を表します。Oracle ドキュメントに記載されている情報

そこで、SQL ステートメントにバインドしている日付に使用している形式を から に変更してみY-m-dますY-m-j。j は PHP の DateTime オブジェクトで [1-31] 日を表すためです。

間違っている場合は修正してください。SQL ステートメントのバインドを行っていた方法を変更すると、エラーがスローされた理由を知りたいですか? それがよくわからないので。

4

1 に答える 1

0

PHP である種のエラー報告を使用する必要があります。あなたのエラーは最初の行にあります:

$dbh = $self::$CI->db->conn_id;

そうあるべき

$dbh = self::$CI->db->conn_id;
于 2012-08-08T15:57:56.040 に答える