Insert语句在PHP中不起作用

时间:2012-08-08 15:43:48

标签: php sql oracle codeigniter pdo

好的抱歉,如果任何术语关闭....所以我试图在我的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-dY-m-j的SQL语句的日期的格式。由于j表示PHP DateTime对象中的[1-31]天。

如果我错了,请纠正我。我有兴趣知道为什么改变我为SQL语句进行绑定的方式会引发错误?因为我不太了解它。

1 个答案:

答案 0 :(得分:0)

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

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

那应该是

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