php - Postgres 中数组元素的自动涂层

标签 php arrays database postgresql web

我在使用 PostreSQL 数组和 html 表单时遇到一些问题。 假设我在网页中有一个文本字段,用户可以在其中编写以逗号分隔的字符串列表,例如名称列表。该列表存储在 Postgres 数据库中。

当页面被请求时,

1)我的 php 代码用 SELECT name_list FROM name; 填充文本字段,我得到的是这样的:

|  name_list         |
|____________________|
| {alice,bob,carl}   |
| ....               |
|                    |

2)删除第一个和最后一个字符(括号)以获得可打印的字符串:

..
$arrayWithoutBrackets = substr($row['name_list'], 1,-1);
echo($arrayWithoutBrackets) ---->  alice,bob,carl
..

该字符串是用户可以读取的内容,最终可以使用简单的 html 表单进行修改并发送回服务器。

但是如果用户插入包含空格的名称(例如alice,bob,carl,john doe)怎么办?这就是更新表后发生的情况:

|  name_list                    |
|_______________________________|
| {alice,bob,carl,"john doe"}   |
| ....                          |
|                               |

Postgres 会自动引用我的字符串,当用户重新加载页面时,他们将看到

alice,bob,carl,"john doe"

不是

alice,bob,carl,john doe

手动搜索引号字符并使用 str_replace() 删除它们不是一个选项,因为我的应用程序中有许多基于数组的文本字段(数百个)。

有什么办法可以解决这个问题吗?

最佳答案

您看到的双引号只是 Postgres 添加的用于明确输入/输出的装饰器。您删除前导和尾随花括号的方法非常hackish。

要获得正确的输出,请使用 array_to_string() :

SELECT array_to_string(namelist, ', ') AS namelist_raw
FROM   names

SQL Fiddle.

但是请注意,Postgres 使用引号是有原因的。如果数组的任何元素中包含分隔符字符串(示例中的 ', '),则输出文本不明确。

关于php - Postgres 中数组元素的自动涂层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27104821/

相关文章:

javascript - 使用 php 提交 html 并使用 Ajax 和 jQuery 保存到 MySQL Db?

php - PHP 中按多个嵌套值排序和数组?

sql - Redshift 上的无效数字

php - 通过 CSV 文件添加数据时出错

PHP通过Webservice在moodle中创建用户

javascript - 如何将数组转换为具有两个值的对象? javascript

java - 在二维数组中查找重复值

arrays - Swift:在数组中查找值并返回特定键

database - Redshift 中的 sortkey 内部如何工作?

sql - 如何在vb.net中使用Switch语句 Access access数据库