0

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を再起動すると動作します。ありがとう!

4

3 に答える 3

1

デフォルトの長さ制限が 1024 の mysql で使用GROUP_CONCATしている場合、結果でそれを超えるものはすべて切り取られます。これは私にも起こりました。

これが問題かどうかを判断するには、次のことを試してください。

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

次に、次のクエリを実行して、mysql で concat 制限がどのように設定されているかを確認します。

SHOW VARIABLES LIKE 'group_concat_max_len'

phpMyAdminで実行しました。strlenとクエリから同じ値を取得した場合はSHOW VARIABLES、my.conf ファイルを更新するか、ホストに依頼する必要があります。WHM/cPanel では、/ etc/ my.confにあり、そのファイルには次のようなものが必要です。

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

私は 5x1024 を選択して 5120 にしました。conf ファイルをサーバーに保存したら、mysql サービスを再起動する必要があります。WHM を使用している場合は、[ホーム] » [サービスの再起動] » [SQL Server (MySQL)]で実行できます。

上記を実行するstrlenと、実際には 3519 がエコーアウトされ、値はカットオフされなくなりました。

于 2015-03-05T04:20:09.533 に答える
1

ここで最大連結の長さを調べる必要があるかもしれません。

コマンドライン形式 --group_concat_max_len=#
オプション ファイルの形式 group_concat_max_len
オプション セット 変数 はい、group_concat_max_len
変数名 group_concat_max_len
可変範囲 グローバル、セッション

動的変数はい
  -- 許容値
プラットフォーム ビット サイズ 32
数値を入力
デフォルト 1024
範囲 4 .. 4294967295

  -- 許容値
プラットフォーム ビット サイズ 64
数値を入力
デフォルト 1024
範囲 4 .. 18446744073709547520

編集: 返される文字列の長さが 1024 であることはかなり面白いと思います。これはたまたま mysql のデフォルトの最大長です。偶然?

于 2012-08-12T22:22:29.583 に答える
0

1. 文字列の実際のサイズに関する情報がほとんど提供されていません。2. いくつか質問があります (配列サイズと文字列サイズ)。

この質問を確認してから、使用しているphpのバージョンなどの追加情報を提供してください。また、@FLuffehがコメントで述べているように、コードを示してください。

于 2012-08-12T22:25:15.627 に答える