2012-08-12 176 views
0

php关联数组中的值字符串是否有限制?数组中值的最大大小PHP

我有一个查询返回值为GROUP_CONCAT作为一个数组元素的CSV。当我直接运行查询时,我看到所有返回的值。当我用PHP打印数组时,字符串被截断。

不知道如何解决它? 任何想法?

更多信息: 我只是var_dump从查询中得到的结果。这里是。 它显示1024.看起来像是有限制的。它是什么?

array(5) { 
    ["FIELD_ID"]=> 
     string(3) "232" 
    ["answers"]=> 
     string(1024) "48,50,52,54,56,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192," 
    ["ANSWER_TYPE"]=> 
    string(2) "SS" 
    ["FIELD_TYPE"]=> 
    string(2) "DA" 
    ["main_field_name"]=> 
    string(0) "" 
    } 

更多信息: 问题依然存在,甚至设置变量group_concat_max_len到5000任何其他的想法后?任何与PDO有关的问题?

重新启动MySQL后,它可以工作。谢谢!

+2

GROUP_CONCAT在mysql中有一个限制,php的限制在理论上是最大内存限制。向我们显示代码 – mrok 2012-08-12 22:17:31

+0

当我运行查询时,它显示完整的CSV。 – 2012-08-12 22:20:53

+0

如何“在PHP中打印数组” - ex var_dump为了便于阅读而剪切数据。任何代码示例仍然受欢迎。 – mrok 2012-08-12 22:24:19

回答

1

您可能需要阅读最大连续的长度here

 
Command-Line Format  --group_concat_max_len=# 
Option-File Format   group_concat_max_len 
Option Sets Variable  Yes, group_concat_max_len 
Variable Name    group_concat_max_len 
Variable Scope Global, Session 

Dynamic Variable   Yes 
    -- Permitted Values 
Platform Bit Size   32 
Type      numeric 
Default     1024 
Range      4 .. 4294967295 

    -- Permitted Values 
Platform Bit Size   64 
Type      numeric 
Default     1024 
Range      4 .. 18446744073709547520 

编辑:我觉得这很有意思,返回给你的字符串长度为1024,这恰好是mysql默认的最大长度。 Coincedence?

+0

我想,这可能是问题所在。我需要更新此设置,并确认它是否有效。但是,当我在phpMyAdmin中运行查询时,它显示完整的字符串,但。 – 2012-08-12 22:37:48

+0

@KevinRave请参阅编辑。 – Fluffeh 2012-08-12 23:15:26

+0

即使将上述变量设置为5000,问题依然存在。还有其他想法吗? – 2012-08-14 05:52:03

0

你的问题有点棘手,因为答案是: 1.你给你的字符串的实际大小的信息很少。 2.你问几个问题(数组大小和字符串大小)。

你应该看看这个question,然后向我们提供额外的信息,比如你正在使用哪个版本的php,并且@FLuffeh在他的评论中说,请给我们看一些代码。

+0

我认为重要的是要知道当然有一个限制,问题是,你是否接近这个限制? – 2012-08-12 22:26:23

+0

我更新了我的帖子,更多详情。这应该解释你需要什么。 – 2012-08-13 04:26:44

1

当你在默认长度限制为1024的mysql中使用GROUP_CONCAT时,结果中的任何内容都会被截断。这也发生在我身上。

要确定是否这是问题,试试这个:

// echo string length to determine what your variable value length is 
echo strlen($variable_here); 

然后检查通过执行此查询什么CONCAT限制在mysql中设置为:

SHOW VARIABLES LIKE 'group_concat_max_len' 

我跑了它在phpMyAdmin 。如果从strlenSHOW VARIABLES查询得到相同的值,则需要更新my.conf文件或要求主机执行此操作。在南国/的cPanel,它位于/etc/my.conf并在该文件就需要有这样的事情:

[mysqld] #<-- Under that 
group_concat_max_len=5120 #<-- add this 

我选择5x1024,使其5120只是没有再处理它。一旦将conf文件保存回服务器,您将需要重新启动mysql服务。如果您使用的WHM,你可以做下首页重新开始»服务» SQL服务器(MySQL的)

一旦我做了上述情况,并strlen其实呼应了3519和值不再削减关闭。