从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
为了避免在这些值周围放置''
,我需要获取表格每列的数据类型,从而检查是否放置引号的条件。
答案 0 :(得分:0)
要获取列的数据类型,您可以尝试:
$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']);
}
}
}
然后这将打印字段的字段名称和数据类型。
我希望你会发现它没什么用处。
答案 1 :(得分:0)
您可以查询目录视图SYSCAT.COLUMNS
以获取信息:
select
colname, typename
from
syscat.columns
where
tabschema = 'YOURSCHEMA' and
tabname = 'YOURTABLE'
但是,您的方法不起作用,因为日期时间文字必须用单引号括起来,删除它们会导致insert
语句无效。为避免SQL0180N错误,您可以提供ISO格式的日期时间值,例如YYYY-MM-DD-HH.MM.SS
的{{1}}。