PHP では MSSQL データベースが使用されており、データベース内でテキスト型フィールドが使用されていたため、問題が発生しました。データベースのデータをクエリするたびに、必ず不可解に切り捨てられます。最初は、私が使用していた PHP フレームワーク には文字列の長さに制限があるのではないかと思いました。後で、これが愚かな考えであることがわかりました。 , データを送信するとき、文字列の内容全体をデータベースに送信できるためですが、この現象は読み取り時にのみ発生するため、同様の問題があるかどうかを確認するためにネットで検索しました。幸運にも最初の検索で解決策を見つけることができたので、私自身と大多数の PHP 愛好家の必要に応じて、それをブログに再投稿することにしました。
次の 2 つの解決策があります:
1. php.ini を次のように変更します:
php.ini を開くと、mssql.textsize と mssql.textlimit の 2 つのオプションが表示されます:
有効範囲は 0 ~ 2147483647。デフォルト = 4096 .
;mssql.textlimit = 4096
; 有効範囲は 0 ~ 2147483647。デフォルト = 4096.
;mssql.textsize = 4096
デフォルトの構成は 4096 バイトであることがわかりますが、これは 4K に切り捨てられることがよくあります。適切なサイズに設定したら、直前のセミコロンを削除し、保存して WEB サーバーを再起動します。
上記の 2 つのオプションから、範囲は 0 ~ 2147483647 バイトであることがわかります。
if(MS_SQL_G(textlimit)!=-1){
sprintf(バッファ,」 %li" ,MS_SQL_G(textlimit));
if(DBSETOPT(mssql.link,DBTEXTLIMIT,buffer) ==失敗){
efree(hashed_details);
dbfreelogin(mssql.login);
RETURN_FALSE;
}
}
if(MS_SQL_G(textsize)) !=-1 ){
sprintf(buffer,"SETTEXTSIZE%li",MS_SQL_G(textsize));
dbcm d(ms) SQL.リンク ,buffer);
dbsqlexec(mssql.link);
dbresults(mssql.link);
}
2. PHPでSELECTクエリを実行する前に実行するSET TEXTSIZE:
mssql_query("SETTEXTSIZE65536");
上記のPHPソースコードからわかるように、実際にはSET TEXTSIZEが実行されます。
上記の方法が機能しない場合は、クエリ ステートメントで CAST 関数を使用してみてください。
上記は、PHP フレームワークの内容を含め、MSSQL データベースのテキスト型フィールドが PHP で切り捨てられる問題の解決策を紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。