[英]Insert statement doesnt work in PHP
好吧,如果有任何术语关闭...。所以我想在我的PHP代码中使用此插入语句。 当我使用isql或sqlplus放置该语句时,该语句运行良好。 但是,当我在PHP中运行查询时,它不会在表中插入任何内容。 不返回任何错误。 我正在使用PHP的PDO扩展。 http://us2.php.net/manual/zh/pdo.prepare.php
插入USER_KEY(CREATED_DATE,COMMENT,EXPIRATION_DATE,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 =“插入到USER_KEY(CREATED_DATE,COMMENT,EXPIRATION_DATE,USER_KEY_ID)值(SYSTIMESTAMP,?,TO_TIMESTAMP(?,'YYYY-MM-DD'),key_sequence.NEXTVAL)”;
$ stmt = $ dbh-> prepare($ sql);
$ stmt-> execute(array(NULL,'2012-02-02'));
对于数据库中的不同表,我的代码中有相似的PHP插入语句,这些语句有效。 但是,那些表不使用任何时间戳,所以我想知道我对时间戳的使用是否会弄乱我在PHP中使用的insert语句? 还有关于为什么在不执行我的语句时没有看到任何错误的解释吗?
更新/解决方案
所以我改变了绑定的方式
$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]而不是[01-31]。 Oracle文档中的信息
因此,我会试着改变我使用我绑定到SQL语句从日期的格式Ymd
至Ymj
。 由于j在PHP DateTime对象中代表[1-31]天。
如果我在任何方面都不对,请纠正我。 我有兴趣知道为什么更改我对SQL语句进行绑定的方式会引发错误吗? 因为我不太了解。
您需要在PHP中使用某种错误报告。 您的错误在第一行:
$dbh = $self::$CI->db->conn_id;
那应该是
$dbh = self::$CI->db->conn_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.