2012-08-12 129 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和值不再削減關閉。