2012-05-19 54 views
1

我有PHP 5.3的PDO问题。我为我的数据库运行MaxDB 7.8 - 如果您还没有听说过,那么您并不孤单。这是一个开源的企业数据库,与纸上的MySQL相连,但并不是这样。

我不确定这个问题是由MaxDB引起的,但我想提一提。

我发现,当通过ODBC驱动程序使用预准备语句时,如果任何$ data数组值都是空字符串,我的查询将失败。例如,用户会看到一个对话框,其中需要1个值('标题'),但2个是可选的('作者','版本')。如果用户选择不输入其中一个可选值,则该数组元素将为==“”。如果是这种情况,$ sth-> execute($ data)失败,抱怨空错误。我试过setAttribute命令重新:所有3设置的空值,我试图检查$ value == null {$ value =“”; } ...以及我在文章中发现的许多其他内容,都无济于事。如果我用“(无)”字符串手动替换任何空值,查询就可以工作。

不管怎么说,这里的细节:

$data: 

Array ( [cust] => 1 [ftype] => 1 [title] => test [author] => [version] => [folder] => 0 [modified] => 1337394898 [content] => "this is test content" [status] => 1 [pages] => 1 )

$sql = "INSERT INTO FORMS (CUST, FTYPE, TITLE, AUTHOR, VERSION, FOLDER, MODIFIED, STATUS, CONTENT, PAGES) VALUES (:cust, :ftype, :title, :author, :version, :folder, :modified, :status, :content, :pages)"; 
$sth = $dbh->prepare($sql) or $this->error($sql, $dbh->errorInfo()); 
$sth->execute($data); 

预先感谢您的帮助!

+1

你得到的错误信息是什么 –

+1

你的数组键也必须以分号开头。像'array(':cust'=> 1,':ftype'=> 1 ......)' – mpratt

+0

@IbrahimAzharArmar:MaxDB引擎报告:“((null)[0] at(null):0 )“ – Joel

回答

0

经过几天的失去时间,我放弃了这一点。如果有人找到解决方案,我很乐意听到它,但我需要继续前进。

我的管道胶带/鸡线解决方案是从绑定参数列表中删除可能为空的值,并将它们作为SQL语句的一部分。这样,如果事情发生等于'',它不会吓坏了&爆炸。

感谢所有试过的人。