0

好吧抱歉,如果有任何术语被关闭......所以我试图在我的 PHP 代码中使用这个插入语句。当我使用 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] 而不是 [01-31]。Oracle 文档中的信息

因此,我将尝试将我用于绑定到 SQL 语句的日期的格式从Y-m-dto 更改为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 回答