ホームページ >バックエンド開発 >PHPチュートリアル >MSSQL データベースのテキスト型フィールドが PHP で切り捨てられる理由の解決策
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(buffer,"%li",MS_SQL_G(textlimit)); if(DBSETOPT(mssql.link,DBTEXTLIMIT,buffer)==FAIL){ efree(hashed_details); dbfreelogin(mssql.login); RETURN_FALSE; } } if(MS_SQL_G(textsize)!=-1){ sprintf(buffer,"SETTEXTSIZE%li",MS_SQL_G(textsize)); dbcmd(mssql.link,buffer); dbsqlexec(mssql.link); dbresults(mssql.link); }2. PHP で SELECT クエリを実行する前に SET TEXTSIZE を実行します: mssql_query("SETTEXTSIZE65536"); 上記の PHP ソース コードから、SET TEXTSIZE が実際に実行されることがわかります。 上記の方法が機能しない場合は、クエリ ステートメントで CAST 関数を使用してみてください。