查询可以从pgAdmin进行。韩元';不能从PHP工作,没有错误

查询可以从pgAdmin进行。韩元';不能从PHP工作,没有错误,php,postgresql,phppgadmin,Php,Postgresql,Phppgadmin,我正在为我的客户重建应用程序。我编写脚本将数据从旧数据库迁移到新数据库。为了防止列中的空值\u start(旧数据库中发生的情况),我运行 刚导入数据。问题是脚本在pgAdmin III上运行良好,但在php脚本上无法执行。PHP语法错误不是这里的问题-将其他查询放在上面引用的变量保持查询中会导致成功的数据操作。页面和日志中没有PHP错误。尝试以下操作: UPDATE items SET etiquette_start = 'E' WHERE length(trim(both ' ' fro

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

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

尝试以下操作:

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

无论哪种方式,都可以简化
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';
由于空格(
“”
)是要删除的默认字符,因此这些表达式100%等效:

trim(etiquette_start)

trim(both ' ' from etiquette_start

为WHERE子句找到一个更简单的SQL解决方案。若数据库中并没有类似“”的字符串,而不是空值或空值,那个么问题很容易解决。有什么建议吗?数据库日志怎么说?设置
log\u statement=all
,然后重试。数据库实际上得到了什么?php代码是什么样子的?表达式
length(trim(两个都来自礼仪开始))=0
trim(两个都来自礼仪开始)='
,这反过来又与
trim(礼仪开始)='
完全相同。完全没有理由这样做。@Erwin你完全正确,但你可能没有仔细阅读这个问题。作者在PHP方面有问题,而不是在Postgres方面。本文介绍的替代方案对PHP有何帮助?OP有一个不相关的问题,这在问题中没有适当地涉及。@ErwinBrandstetter-从问题中应该很清楚,作者不知道如何正确地将空字符串常量作为参数写入PHP中的sql查询。由于我们没有看到我建议的sql查询代码,所以他不必使用空字符串。这一点从问题中根本不清楚,特别是因为语句中有更多的单引号。
trim(etiquette_start)

trim(both ' ' from etiquette_start