插入语句在 PHP 中不起作用


Insert statement doesnt work in PHP

好吧,对不起,如果任何术语不对....所以我正在尝试在我的 PHP 代码中使用此插入语句。当我使用 isql 或 sqlplus 将其放入时,该语句工作正常。但是当我在 PHP 中运行查询时,它不会在表中插入任何内容。不返回任何错误。我正在使用PHP的PDO扩展。http://us2.php.net/manual/en/pdo.prepare.php

插入USER_KEY (CREATED_DATE, 评论 EXPIRATION_DATE, USER_KEY_ID)
值(系统时间戳, 零
TO_TIMESTAMP('2012-02-02', '年-月-日'), key_sequence。下一个瓦尔);

我的php代码看起来像这样,我正在使用CodeIgniter

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

$sql ="插入USER_KEY(CREATED_DATE、注释、EXPIRATION_DATE、USER_KEY_ID) 值(系统时间戳、?、 TO_TIMESTAMP(?, 'YYYY-MM-DD'),key_sequence。下一个瓦尔)";

$stmt = $dbh->准备($sql);

$stmt->执行(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

从这个错误中,我发现我输入的日期与我在 SQL 语句的 TO_TIMESTAMP 函数中的格式不匹配。
http://www.techonthenet.com/oracle/errors/ora01830.php

我不知道这一点,但在甲骨文中,DD 代表 [1-31] 而不是 [01-31]。在 Oracle 文档中找到的信息

因此,我将尝试将绑定到 SQL 语句的日期使用的格式从 Y-m-d 更改为 Y-m-j 。由于 j 表示 PHP DateTime 对象中的 [1-31] 天。

如果我错了,请纠正我。我很想知道为什么更改 SQL 语句绑定的方式会引发错误?因为我不太明白这一点。

你需要在PHP中使用某种错误报告。您的错误在第一行:

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

那应该是

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