SQL文の引数としてPOSTパラメータを1つ使用して、ここにクエリ(MySQLデータベースのZend Frameworkを使用したPHP)があります。mysql_real_escape_stringメソッドが実際に遅い(ほぼ1秒)
私は開発マシンにローカルXAMPPをインストールしていますが、この小さなスクリプトの実行時間は、前にその引数にmysql_real_escape_string()を使用するかどうかにかかわらず引数を渡すかどうかに関係なく150msのようなものです。
次に、BitNami-WAMP-Stackがインストールされた仮想サーバーがあります。私がスクリプトを実行すると(100%同じデータベースの内容)、mysql_real_escape_stringなしで約260msかかってしまいますが、これはローカルマシンとしては「高速」(150msはまったく高速ではないことがわかります)ではありませんが、大丈夫です。しかし、POST変数から1つのmysql_real_escape_string()を引数に追加すると、すべての処理に1.2秒かかります。
また、mysql_real_escape_stringを呼び出すたびに、仮想サーバー上でスクリプトを約1秒遅く実行することに気付きました。私のローカルマシンでは、これは何の効果もありません。
これはどのようにすることができますか?これはMySQLのセットアップのことか、PHP.iniのものなのでしょうか?私は100%同じデータベースと両方のマシン上のPHPソースを持っているので、私はそれがただパラメータ化できると思いますか?
事前にお問い合わせいただきありがとうございます。
EDIT:だからここ
は、最初の(bootstrap.phpの中で)DB接続、私は何をすべきかです:その後、
$GLOBALS["db"]= new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => "localhost",
'username' => "user",
'password' => "password",
'dbname' => "database"
));
以降場合に役立ちデータベースクエリに:
をglobal $db;
$query = sprintf("SELECT * FROM table WHERE id = '%s'", mysql_real_escape_string($id));
$db->query("SET NAMES 'utf8'");
$db->fetchAll($query);
私はこの単純なテストラインを自分のコードに追加すると、仮想マシン上でスクリプトが〜600ms遅くなります。
mysql_real_escape_string("TEST");
クエリの作成と実行のコードを表示できますか?また、DBは同じ物理/仮想で実行されますか? – prodigitalson
エスケープする文字列のサイズ(文字数)はどれくらいですか? –
私がエスケープしている文字列は、2〜5桁の長さを持つintデータベースIDだけです – homtg