好吧,对不起,如果任何术语不对....所以我正在尝试在我的 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;