【问题标题】:How to get the data type of db2 variables in php?php中如何获取db2变量的数据类型?
【发布时间】:2014-07-23 09:09:46
【问题描述】:

从 PHP 代码中,我尝试在 DB2 表中插入一个新行,其中我有列名但没有相应的数据类型。

Insert into <table_name> (column1,column2,column3,.....) values ('value1','value2','value3',....)

所以,如果任何列是日期或时间戳数据类型,'value' 周围的单引号会使 db2_exec 函数抛出错误:

Warning: db2_exec(): Statement Execute Failed in C:\Program Files (x86)\insight_db.php on line 68 [IBM][CLI Driver][DB2/NT64] SQL0180N The syntax of the string representation of a datetime value is incorrect. SQLSTATE=22007 SQLCODE=-180

为了避免在这些值周围放置'',我需要获取表格每一列的数据类型,从而检查是否放置引号的条件。

【问题讨论】:

  • DB2 没有抱怨引号。它抱怨日期或时间戳的格式。 'YYYY-MM-DD' 应该没问题。你在用什么?
  • 就我而言,我正在动态获取值。这些值也可以为空。如果我在控制中心的日期变量中不插入任何内容,它就可以正常工作。

标签: php sql db2


【解决方案1】:

您可以查询目录视图SYSCAT.COLUMNS获取信息:

select
  colname, typename
from 
  syscat.columns
where
  tabschema = 'YOURSCHEMA' and
  tabname = 'YOURTABLE'

但是,您的方法行不通,因为日期时间文字必须用单引号括起来,删除它们会使您的insert 语句无效。为避免 SQL0180N 错误,您可以提供 ISO 格式的日期时间值,例如YYYY-MM-DD-HH.MM.SSTIMESTAMP

【讨论】:

    【解决方案2】:

    要获取列的数据类型,您可以试试这个:

    $result = mysql_query("SHOW COLUMNS FROM sometable");
    if ($result) 
    {
        if (mysql_num_rows($result) > 0) 
        {
             while ($row = mysql_fetch_assoc($result)) 
             {
                 print_r($row['Field']);
                 print_r($row['Type']);
             }
        }
    }
    

    然后这将打印字段的字段名称和数据类型。

    希望对您有所帮助。

    【讨论】:

    • 但是你能给我任何适用于 IBM DB2 的解决方案吗?
    • 我认为这可能有效: DESCRIBE TABLE schema.TABLE_NAME 该命令将为每一列输出以下信息。列名 类型 架构类型名 长度 比例(精度) Nulls(可以为空)
    • 我也试过这个。但是 db2_exec() 不能执行 describe 语句。有没有办法在 php 中执行 DESCRIBE 语句?不管怎样,谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2014-09-12
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2016-12-03
    相关资源
    最近更新 更多