查询适用于pgAdmin。无法在PHP中运行且没有错误

时间:2013-03-30 22:26:32

标签: php postgresql phppgadmin

我正在为我的客户重建应用程序。我编写脚本将数据从旧数据库迁移到新数据库。为了防止列etiquette_start中的空值(旧数据库中发生了什么),我运行

UPDATE items 
SET etiquette_start = 'E' 
WHERE trim(both ' ' from etiquette_start) = '' 
OR etiquette_start is null;

导入数据后。问题是脚本在pgAdmin III上工作正常,但它不会在php脚本上执行。 PHP语法错误不是这里的问题 - 将其他查询放在上面引用的变量保持查询中导致成功的数据操作。页面和日志中没有PHP错误。

2 个答案:

答案 0 :(得分:2)

试试这个:

UPDATE items 
SET etiquette_start = 'E' 
WHERE length(trim(both ' ' from etiquette_start)) = 0 
OR etiquette_start is null;

答案 1 :(得分:0)

无论哪种方式,您都可以简化trim()调用并阻止空更新:

UPDATE items 
SET    etiquette_start = 'E'
WHERE (trim(etiquette_start) = '' OR etiquette_start IS NULL) -- parens needed
AND    etiquette_start IS DISTINCT FROM 'E';

由于空格(' ')是trim()要删除的默认字符,因此这些表达式是100%等效的:

trim(etiquette_start)

trim(both ' ' from etiquette_start