php + mssql だと本当に面倒です。 PHP および mssql を読み取る際の ntext フィールド タイプの問題が再び発生します。ntext の内容が長すぎると、読み取りが不完全になります。
長い間ネットで検索しましたが、phpでntextを読み込むときにエラーが発生すると皆が言っていましたが、私のページではエラーが見つからなかったので、落ち込んでいました。後で、PHP はデフォルトで 4K までのコンテンツしか読み込めないことがわかりました。私のコンテンツは 4K を超えていたことが判明しました。改造方法は以下の通りです
次:
1.phpをphp5にアップグレードします。
幸いなことに、私のものはすでにphp5です。
2. php.ini のパラメータを調整し、php のデフォルトの最大読み取り可能サイズを 4K に変更します。
; 有効範囲は 0 ~ 2147483647。デフォルト = 4096.
;mssql.textlimit = 4096
; 有効範囲は 0 ~ 2147483647。デフォルト = 4096.
;mssql.textsize = 20480
mssql.textlimit と mssql.textsize の前の「;」を削除し、デフォルト値を 20480 (20K) などのより大きな値に変更します
3. Webサーバーを再起動します。
ワクワクする瞬間が来ると思って php ページを実行すると、効果は以前と同じで、フィールド データが完全に読み込まれませんでした。その後、PHP の ntext サポートはあまりフレンドリーではなく、テキストに変換する必要があるという情報を見つけました。そこでまた
Convert(text, content) を実行しましたが、効果がなく、iis がほとんど壊れてしまいました。長い間ネットで検索していますが、解決策が見つかりません。諦めかけたとき、あるアイデアをきっかけにデータベースの接続方法を変更しました。
を入れましたodbc_connect が mssql_connect に変更され、成功しました。
phpリンクmssqlの問題ntextを読み取れません
明らかにデータベースに接続できますが、データを読み取ることはできません。 Google や Baidu で検索した結果、mssql を読み込むときに PHP によって返される ntext フィールドが空であることがわかりました。ntext フィールドを text に変更することをお勧めします。
テーブルに ntext フィールドがない場合は、次のコードを使用できます:
コードは次のとおりです | コードをコピー |
//MSSQL に接続します $link = mssql_connect('KALLESPCSQLEXPRESS', 'sa', 'phpfi'); if(!$link !mssql_select_db(‘php’, $link)) { die('データベースに接続または選択できません!'); } // 簡単なクエリを実行し、 のバージョンを選択します//MSSQL を実行して印刷します。 $version = mssql_query(‘SELECT @@VERSION’); $row = mssql_fetch_array($version); echo $row[0]; //掃除 mssql_free_result($version); ? 》 |
テーブルに ntext フィールドがあり、それをテキスト フィールドに戻すことが難しい場合は、次のことができます:
1.php.iniを変更します
php.iniを開く
見つかりました:
;mssql.textlimit = 4096
が
に変更されましたmssql.textlimit = 2147483647
見つかりました:
;mssql.textsize = 4096
が
に変更されましたmssql.textsize = 2147483647
2. 変更されたフィールドを使用できます。SQL Server の ntext フィールドと nvarchar フィールドはコンテンツの保存に Unicode エンコーディングを使用するため、PHP は mssql 拡張機能を使用して ntext 型と nvarchar 型のフィールドを読み取るとエラーが発生します。
タイトル フィールドのタイプが nvarchar で、コンテンツ フィールドのタイプが ntext の場合、次の SQL ステートメントはエラーを報告します:
間違い:
記事からタイトル、内容を選択
正解:
コードは次のとおりです | コードをコピー |
タイトルとしてconvert(varchar(255),title)を選択し、記事のコンテンツとしてconvert(text,content)を選択します |
{この方法はあまり実用的ではありません。ntext のコンテンツが長すぎると、変換後にデータが失われます。また、sql2008 で ntext を nvarchar(max) に変更しても機能しません。
3. 仮想ホストの場合は、adodb コンポーネントを使用して読み取ることができます。ホストがサポートしていない場合、現時点では私にできることは何もありません。
コードをコピー | |
include("adodb/adodb.inc.php"); //adodb クラス ライブラリ ファイルをインクルードします $conn=NewADOConnection('odbc_mssql') //SQL Server データベースに接続します $conn-》Connect("Driver={SQL Server};Server=localhost;Database=mydb;",'username','password');
|
5.2.11 は MSSQL 2000 のみをサポートします。MSSQL 2005 および 2008 をサポートする必要がある場合は、Microsoft が提供するドライバーをインストールする必要があります
}
? >
mssqlのntextフィールドを読み取ると空が返されます
テスト中、データベースに接続できることは明らかでしたが、データを読み取ることができませんでした。情報を検索したところ、mssql を読み取るときに PHP によって返される ntext フィールドが空であることがわかりました。ntext フィールドを text に変更することをお勧めします。
コードをコピー | |
// MSSQL に接続します
$link = mssql_connect('KALLESPCSQLEXPRESS', 'sa', 'phpfi');
{
$version = mssql_query('SELECT @@VERSION');
$row = mssql_fetch_array($version); mssql_free_result($version); ?>
|
テーブルに ntext フィールドがあり、それをテキスト フィールドに戻すことが難しい場合は、次のことができます:
php.iniを開く
見つかりました:
;mssql.textlimit = 4096
に変更します
mssql.textlimit = 2147483647
;mssql.textsize = 4096
に変更します
mssql.textsize = 2147483647
タイトル フィールドのタイプが nvarchar で、コンテンツ フィールドのタイプが ntext の場合、次の SQL ステートメントはエラーを報告します:
間違い:
記事からタイトル、内容を選択
正解:
コードは次のとおりです
タイトルとしてconvert(varchar(255),title)を選択し、記事のコンテンツとしてconvert(text,content)を選択します | |||
コードは次のとおりです | コードをコピー |
include("adodb/adodb.inc.php"); //adodb クラス ライブラリ ファイルをインクルードします $conn=NewADOConnection('odbc_mssql') //SQL Server データベースに接続します $conn->Connect("ドライバー={SQL Server};サーバー=localhost;データベース=mydb;",'ユーザー名','パスワード'); ?> |