5

PHP - MySQL で Web サイトを開発しています。注意すべき点を次に示します。

  • データベース アクセスにMySQLi API を使用しています。
  • 私の XAMPP (Windows 7 マシン) のローカル インストールでは、PHP のバージョンは5.3.8で、MySQL のバージョンはmysqlnd 5.0.8-dev - 20102224 です。
  • 「cuccfree.com」をテストするために、無料のホスティング サーバーで Web サイトをホストしました。ここで、PHP のバージョンは5.3.14で、MySQL のバージョンは5.1.66です。他の多くのホスティング会社と比較して、MySQLi のサポートは依然として優れています。
  • 両方を phpinfo'ing すると、ローカル マシンにはmysqlndドライバーがインストールされていることが示されますが、ホスティング サーバーにはインストールされていません。
  • 関数mysqli_stmt::get_result()を使用して ResultSet をフェッチする MySQLi 用のラッパー クラスを作成しました。この関数はローカル マシンでは機能しますが、cuccfree.com ホスティング サーバーでは機能しません。これは、 mysqliオブジェクトにget_result()という名前のメソッドがないためです。ただし、mysqli_stmtオブジェクトが準備されbind_paramが正常に実行されます。
  • php.netmysqli_stmtのマニュアル ページには、 mysqli_stmt::get_result()を使用するには、 mysqlndドライバーをインストールする必要があると書かれています。
  • サーバーの構成では、mysqli_stmt::bind_object()を使用できます。しかしget_result()、配列の形式で結果を得ることができるので、私にとってははるかに良い選択のようです。次の行を使用して、可変数の引数を受け入れるように関数をオーバーライドしました。

    call_user_func_array(array($stmt, 'bind_param'), $params);

$params はパラメータの配列です。

  • bind_object() を使用して、返されたすべての列を変数にバインドする必要があります。その場合、すべての SQL クエリを 1 点で処理するラッパー クラス関数を作成することはできません。

私はいくつかのホスティング会社を探し、GoDaddy や Manas Hosting を含む多くの会社のカスタマー サポートと話し、メールしましたが、それらはmysqlndの使用を提供していません。彼らは、非常に論理的に、VPSまたは専用サーバーの使用を主張しています. そして明らかに、提案されたオプションは両方とも、エントリーレベルであっても非常に高価です.

最後に私の質問ですが、Linux サーバー上の Web サイトに mysqlnd をインストール/埋め込むことはできますか? そうでない場合、何日もかかるウェブサイト全体のコードを変更するのを防ぐために、どのような代替手段が必要ですか?

よろしく

4

2 に答える 2

1

あなたのホスティング会社がその使用を有効にしていない限り、dl()私は彼らがそうしていないことをほぼ保証できます.

あなたがすでに指摘した2番目のオプションは、mysqlndの互換性レイヤーを作成することです(または、存在する可能性があります。おそらく他の誰かがあなたをその方向に向けることができます)。あなたが自分で書いたので、まだ存在していないと思います。残念ながら、あなたは泥沼にはまっていると思います。

いずれにせよ、次回は本当に PDO を使用する必要があります :) しかし、後知恵は 20/20 であることはわかっています。

于 2012-12-05T17:09:33.177 に答える