Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Postgres中数组元素的自动引用_Php_Arrays_Database_Postgresql_Web - Fatal编程技术网

Php Postgres中数组元素的自动引用

Php Postgres中数组元素的自动引用,php,arrays,database,postgresql,web,Php,Arrays,Database,Postgresql,Web,我在PostreSQL数组和html表单方面遇到了一些问题。 假设我在网页中有一个文本字段,用户可以在其中编写逗号分隔的字符串列表,例如名称列表。此列表存储在Postgres数据库中 当请求页面时 1) 我的php代码用SELECT name\u list FROM names填充文本字段我得到的结果是: | name_list | |____________________| | {alice,bob,carl} | | .... | |

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

当请求页面时

1) 我的php代码用
SELECT name\u list FROM names填充文本字段我得到的结果是:

|  name_list         |
|____________________|
| {alice,bob,carl}   |
| ....               |
|                    |
2) 删除第一个和最后一个字符(括号),以获得可打印的字符串:

..
$arrayWithoutBrackets = substr($row['name_list'], 1,-1);
echo($arrayWithoutBrackets) ---->  alice,bob,carl
..
用户可以读取该字符串,并最终使用简单的html表单修改并发送回服务器

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

|  name_list                    |
|_______________________________|
| {alice,bob,carl,"john doe"}   |
| ....                          |
|                               |
Postgres会自动引用我的字符串,当用户重新加载页面时,他们会看到

alice,bob,carl,"john doe"
不是

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


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

您看到的双引号只是Postgres添加的明确输入/输出的修饰符。你移除前导和尾随的花括号的方法非常粗糙

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


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

什么是“基于数组的文本字段”?列是数组还是文本?如果是数组,您如何解析数组内容?如果是文本,为什么要在其中存储数组?请始终包含您的Postgres版本,最好是表的定义。@Richard Huxton“基于数组的文本字段”是我定义文本字段的方法,其中填充了字符串数组的值。name_list是一个varchar数组,我解析它时正在删除括号。@Erwin Brandstetter我运行的是PostgreSQL 9.3,我认为定义太长且不相关。顺便说一句,我在同一张表中还有很多其他栏目。谢谢你的回答。它非常有用。如果我有多个列,需要选择*?@user3067250:您可以将其与任意数量的列组合。
alice,bob,carl,john doe
SELECT array_to_string(namelist, ', ') AS namelist_raw
FROM   names