好的抱歉,如果任何术语关闭....所以我试图在我的PHP代码中使用这个插入语句。当我使用isql或sqlplus时,该语句工作正常。但是当我在PHP中运行查询时,它不会在表中插入任何内容。不会返回任何错误。我正在使用PHP的PDO扩展。 http://us2.php.net/manual/en/pdo.prepare.php
INSERT INTO USER_KEY (创建日期, 评论, 截止日期, USER_KEY_ID)
价值观(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) 价值观(SYSTIMESTAMP,?, TO_TIMESTAMP(?,'YYYY-MM-DD'),key_sequence.NEXTVAL)“;
$ stmt = $ dbh-> prepare($ sql);
$ stmt->执行(阵列(NULL, '2012-02-02'));
我的代码中有类似的PHP插入语句,用于我的数据库中的不同表,这些语句都有效。但是,那些表不使用任何时间戳,所以我想知道我是否以某种方式使用时间戳是什么搞乱我在PHP中使用的插入语句?还有任何解释为什么我的声明没有执行时我没有看到任何错误?
UPDATE /溶液
所以我改变了我对绑定的方式
$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
我不知道这个,但在oracle DD代表[1-31] NOT [01-31]。 Oracle文档中的信息
因此,我将尝试更改我用于绑定到Y-m-d
到Y-m-j
的SQL语句的日期的格式。由于j表示PHP DateTime对象中的[1-31]天。
如果我错了,请纠正我。我有兴趣知道为什么改变我为SQL语句进行绑定的方式会引发错误?因为我不太了解它。
答案 0 :(得分:0)
您需要在PHP中使用某种错误报告。您的错误出现在第一行:
$dbh = $self::$CI->db->conn_id;
那应该是
$dbh = self::$CI->db->conn_id;