1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.3 $ -->
<chapter id="faq.databases">
<title>データベースに関する問題</title>
<titleabbrev>データベースに関する問題</titleabbrev>
<para>
このセクションではPHPとデータベースとの関係に関する一般的な質問を扱
います。なんと!PHPは事実上あらゆるデータベースにアクセスすることが
できます。
</para>
<qandaset>
<qandaentry id="faq.databases.mssql">
<question>
<para>
PHPはMicrosoft SQLサーバにアクセスできると聞きました。どうすれば
よいのでしょうか?
</para>
</question>
<answer>
<para>
Windowsマシン上では、ODBCサポートと適切なODBCドライバを使用すれ
ばよいだけです。
</para>
<para>
Unixマシン上では、Sybase-CTドライバを使ってMicrosoft SQLサーバに
アクセスすることができます。なぜなら(ほとんど完全に)プロトコル互
換だからです。Sybaseは<ulink url="&faqurl.sybase;">Linux用のフリー
な必須ライブラリ</ulink>を作成しました。他のUnixシステムでは適切
なライブラリを手に入れるためにSybaseと連絡を取る必要があります。
次の質問に対する回答も参照してください。
</para>
</answer>
</qandaentry>
<qandaentry id="faq.databases.access">
<question>
<para>Microsoft Accessデータベースにアクセスできますか?</para>
</question>
<answer>
<para>
はい。もし全て(PHPとMicrosoft Access)をWindows9x/Me/NT/2000上で
動作させるのであり、ODBCとMicrosoftが提供するODBCドライバ for
Microsoft Accessが使用できる状態ならば、すべての必要なツールは揃っ
ています。
</para>
<para>
UnixでPHPを動作させてWindowsマシンで操作するMS Accessに接続した
い場合にはUnix ODBCドライバが必要です。<ulink
url="&faqurl.openlinksw;">OpenLink Software</ulink>がUnixベース
のODBCドライバを提供しています。このドライバには無期限の試用版が
あり、また商用サポートバージョンが675ドル〜
で提供されています。
</para>
<para>
他には、Microsoft SQLサーバにODBCドライバを使用してデータを保存
するという手段もあります。これによって、Microsoft Access(ODBCを
使用します)とPHP(組み込まれているドライバを使用します)でデータに
アクセスすることができます。また、Microsoft AccessとPHP両者共に
解釈可能な中間ファイル(例えば単層からなるファイルや、 dBaseデー
タベース等)を使用する手もあります。これに関してはOpeLink
SoftwareのTim Hayesが以下のように述べています:
<programlisting>
PHPからじかにODBCドライバが使用できる場合(つまりOpenLinkのドラ
イバを使用している場合)には、他のデータベースを中継手段として用
いることはよいアイデアとは言えない。どうしても中間ファイルが必
要な場合のために、OpenLinkはNT, Linux, そして他のUnix用の
Virtuoso(仮想データベースエンジン)をリリースした。私たちの
<ulink url="&faqurl.openlinksw;">ウェブサイト</ulink>を訪れても
らえれば、無料でダウンロードできる。
</programlisting>
</para>
<para>
うまくいくことが分かってるもう一つの方法はMySQLと、Windows用の
MyODBCドライバを利用してデータベースを同期する方法です。Steve
Lawrenceが言うには:
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
MySQLを説明に従って任意のプラットフォームにインストールします。
最新バージョンは<ulink
url="&faqurl.mysql;">www.mysql.com</ulink>(ミラーを使うこと!)
にあります。データベースを作成するとき、そしてユーザアカウン
トを設定するときに、ホストフィールドに%か、MySQLを使ってアク
セスするWindowsマシンのホスト名を入力する、ということ以外には
特別な設定は必要ありません。
</simpara>
</listitem>
<listitem>
<simpara>
MySQLサイトからWindows用MyODBCドライバをダウンロードします。
最新のリリースはmyodbc-2_50_19-win95.zipです(NT版、ソースコー
ドも入手可能です)。これをWindowsマシンにインストールします。
アーカイブに含まれるユーティリティプログラムでテストを行うこ
とができます。
</simpara>
</listitem>
<listitem>
<simpara>
コントロールパネルのODBC administratorを使用してユーザ、もし
くはシステムDSNを作成します。DSN名を決定して、Step1でMySQLに
設定したホスト名、ユーザ名、パスワード、ポート等を入力します。
</simpara>
</listitem>
<listitem>
<simpara>
Accessをフルインストールでインストールします。これは適切なア
ドインをインストールするためです。少なくともODBCサポートとリ
ンクテーブルマネージャが必要です。
</simpara>
</listitem>
<listitem>
<simpara>
ここからがお楽しみです。新規データベースを作成しましょう。テー
ブルウィンドウで右クリックしてリンクテーブルを選択します。も
しくはファイルメニューから外部データの取り込みを選びリンクテー
ブルを選択します。ファイルブラウザが表示されたらファイルタイ
プからODBCを選択します。次にシステムDSNを選択肢STEP3で作成し
たDSN名を選択します。リンクするテーブルを選んでOKボタンを押し
ましょう。MySQLサーバでテーブルのオープンをオープンできるよう
になっていて、データの追加/削除/編集ができるようになっていま
す。さらに、クエリの構築、テーブルのインポート/エクスポート、
フォームやレポートの構築等が可能です。
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
Tips and Tricks(役に立つヒント):
<itemizedlist>
<listitem>
<simpara>
Accessでテーブルを作成してそれをMySQLへエクスポートします。そ
れを再度アクセスからリンクすれば素早くテーブルを作成すること
ができます。
</simpara>
</listitem>
<listitem>
<simpara>
Accessでテーブルを作成するときは、そのテーブルに書き込み権限
をもたせるためにプライマリキーを設定しておく必要があります。
Accessとテーブルをリンクする前にMySQLにプライマリキーを設定し
ておくことも忘れないでください。
</simpara>
</listitem>
<listitem>
<simpara>
MySQL側でテーブル(の構成)を変更した場合、再度Accessとリンクす
る必要があります。ツール>アドイン>リンクテーブルマネージャか
ら適切なODBC DSNを選んで再リンクが必要なテーブルを選択します。
また、ここでOKボタンを押す前に「リンク先を更新するためのプロ
ンプトを毎回表示する」をチェックしておけばDSNソースを移動させ
ることができます。
</simpara>
</listitem>
</itemizedlist>
</para>
</answer>
</qandaentry>
<qandaentry id="faq.databases.upgraded">
<question>
<para>
PHP 4にアップグレードしたら、mysqlサーバが"Warning: MySQL:
Unable to save result set in ..."という警告をしつづけます。何が
起こっているのでしょうか?
</para>
</question>
<answer>
<para>
一番に考えられるのはPHP 4を、MySQLへのパス指定なしに'--
with-mysql'オプションをつけてコンパイルしたという場合です。これ
はPHPが組み込まれたMySQLクライアントライブラリを使用するというこ
とを意味します。もしあなたのシステムで、PHP 3やauth-mysqlの
apacheモジュールといった他のバージョンのMySQLクライアントを使用
するアプリケーションが同時に動作している場合には、各クライアント
間でバージョンの競合が発生してしまいます。
</para>
<para>
PHP 4を'<link
linkend="install.configure.with-mysql">--with-mysql=/your/path/to/mysql</link>'
というようにオプションにパスを記述して再コンパイルすることで通常
の場合は問題は解決されます。
</para>
</answer>
</qandaentry>
<qandaentry id="faq.databases.shared-mysql">
<question>
<para>
共有MySQLサポートをインストールしたら、libphp4がロードされると同
時にApacheがコアダンプします。直りますか?
</para>
</question>
<answer>
<para>
もしあなたのシステムのMySQLライブラリがpthreadsとリンクされてい
る場合にはこの現象が発生します。lddコマンドを使用してチェックし
てください。もしpthreadsがリンクされている場合は、MySQLのtarball
を展開してソースからコンパイルしなおしてください。もしくはSRPMの
SPECファイルのスレッドクライアントコードの箇所を削除してコンパイ
ルしなおしてください。いずれかの方法で問題を解決できます。その後、
PHPを新しいMySQLライブラリでコンパイルしなおしてください。
</para>
</answer>
</qandaentry>
<qandaentry id="faq.databases.mysqlresource">
<question>
<para>
なぜこのようなエラーがでるのでしょうか?: "Warning: 0 is not a MySQL
result index in <file> on line <x>" もしくは "Warning: Supplied argument
is not a valid MySQL result resource in <file> on line <x>?
</para>
</question>
<answer>
<para>
あなたは値が0である結果(result)IDを指定しようとしています。0はあ
なたのクエリが何らかの理由で失敗したことを示しています。応答
(result)IDを使用する前に、クエリを送信したあとのエラーをチェック
する必要があります。以下のようなコードが正しい方法です。
<programlisting>
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
echo mysql_error();
exit;
}
</programlisting>
もしくは
<programlisting>
$result = mysql_query("SELECT * FROM tables_priv")
or die("Bad query: ".mysql_error());
</programlisting>
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|