繁体   English   中英

插入PHP语句不工作

[英]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语句从日期的格式YmdYmj 由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM