2012-08-12 5 views
0

php 연관 배열의 값 문자열에 제한이 있습니까?최대 배열의 값의 크기 PHP

배열 요소에 대해 CSV로 GROUP_CONCAT 값을 반환하는 쿼리가 있습니다. 쿼리를 직접 실행하면 반환되는 모든 값을 볼 수 있습니다. 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 limit는 이론적으로 최대 메모리 제한입니다. 코드 표시 – mrok

+0

쿼리를 실행하면 전체 CSV가 표시됩니다. –

+0

어떻게 "PHP에서 배열 인쇄"- var_dump는 데이터 가독성을 위해 데이터를 잘라냅니다. 모든 코드 예제는 여전히 환영받습니다. – mrok

답변

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 

편집 : - 단지 MySQL의에서 기본 최대 길이 될 일이있는 내가 당신에게 반환되는 문자열의 길이는 1024입니다 오히려 재미있는 찾을 수 있습니다. 성원?

+0

아마도 이것은 문제 일 수 있습니다. 이 설정을 업데이트하고 작동하는지 확인해야합니다. 그러나 phpMyAdmin에서 쿼리를 실행하면 완전한 문자열이 표시됩니다. –

+0

@KevinRave 편집하기 참조. – Fluffeh

+0

위의 변수를 5000으로 설정 한 후에도 문제가 계속 발생합니다. 다른 아이디어는 있습니까? –

0

1. 문자열의 실제 크기에 대한 정보는 거의 제공하지 않으므로 대답하는 것이 다소 까다 롭습니다. 2. 배열 크기와 문자열 크기와 같은 몇 가지 질문을하고 있습니다.

당신은이 question을 확인한 다음 사용중인 PHP 버전과 @FLuffeh와 같은 추가 정보를 제공해야합니다. 그의 코멘트에서 우리에게 몇 가지 코드를 보여주십시오.

+0

내가 중요하다고 생각하는 것은 물론 한계가 있음을 아는 것입니다. 문제는 한계에 너무 근접합니까? –

+0

내 게시물을 더 자세히 업데이트했습니다. 그게 너에게 필요한 것을 설명해 줄거야. –

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 파일을 업데이트하거나 호스트에 요청해야합니다. WHM /의 cPanel에서, /etc/my.conf 에 위치하고 있으며 해당 파일에서이 같은 있어야합니다 :

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

내가 5120 그냥하지 수 있도록 5x1024를 선택을 다시 처리하십시오. 일단 conf 파일을 서버에 다시 저장했다면, mysql 서비스를 재시작해야한다. 당신이 WHM를 사용하는 경우, 당신은 내가 위를 한 후에는 홈»서비스 다시 시작 아래 SQL 서버 (MySQL의)»

에서, strlen 사실 3519을 에코 않았다고 할 수 없으며 값이 더 이상 절단 떨어져서.