2017-01-17 3 views
0

*()と機能のmysqliの*()ファミリ、PHP/mysql:mysql_ *からmysqli_ *への実行可能な一時パッチを(SELECT、{resource})から({resource}、SELECT)に変更していますか? mysqlののアプリケーションの違いの最初の検査で

$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database); 

が急速に置換することができるように私には見える:

$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter"); 

:同様に、また、

IF ($A = mysql_fetch_array($seta)) { 
    do { 
    //code here 
    } while ($A = mysql_fetch_array($seta)); 
} 

を置き換えることができることが表示されます

IF ($A = mysqli_fetch_array($seta)) { 
    do { 
    //code here 
    } while ($A = mysqli_fetch_array($seta)); 
} 

これは私の予想通りですか? mysqli *()の前に働いていたのですか?

に注意してください:I 場合、私は求めていないのですはI CANこれを行う場合にのみ、これを行う必要があります。私は壊れた脚にバンドエイドを叩くことは役に立たないとよく知っています...それは、3月のデモが準備されている前に、何時間ものコーディング/テスト時間がないと言いました。

はい、これは脆弱なコードであると私は理解しています。保障措置なしでは生産に行きません。私はまた、mysqli *()ファミリのすべての機能をこのように使用しているわけではないことも認識しています。

私の目標は、そのような重大な時間のクランチがない場合(はい、私が知っている有名な最後のプログラマーの言葉)、すべてを適切にリファクタリングすることです。私はデモ用に走らせるためにパッチコードを必要とするだけで、私はそれをやめることができます。

私は、現場でもサーバ上でも、プロトタイプが動作しているので、私はソフトウェアアップデートの必要性を証明するためにスピンアップしていることを期待しています。PHP v4.xのブルース後ろに。

プロジェクト:
PHP/MySQL better user searching

もチェック:タイトル以上
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
をして、

+1

問題とは何ですか? * "私はこれをしなければならないかどうかを尋ねていません。 –

+0

@ fred-ii私を許して、私の質問ははっきりしていると思った。投稿が編集されました。関数ファミリの構文/操作についての私の理解が最も基本的な意味で正しいかどうかを尋ねています。 –

+0

* "mysqli *()の前に動作していたので、これは期待どおりに動作しますか?" * - テスト用のdb /スクリプトで試してみてください。構文エラーがなければ、どのように失敗するかはわかりません。最初の引数として渡されるdb接続を必要とするmysqli_関数がいくつかあることを覚えておいてください。一度それをしたら、すべてが計画どおりに進むはずです。ただし、異なるMySQL APIを混在させることはできません。 –

答えて

2

迅速かつ汚い方法をフォーマット防ぐために、アンダースコアを整えましたダーティーに重点を置くと、mysql_querymysqli_queryに変換してこのようにすることです。問題はmysql_queryですので、コーディングスタイルが何かをきれいにするのに役立つことはないので、使用するには本当に大変です。

mysqli必要な場合は、parameterized queriesbind_paramを使用してクエリにユーザーデータを追加することをお勧めします。これは、PDOに切り替えることを強くお勧めします。これは、ゲートの大部分をSQL injection bugsの解決します。私はまた、オブジェクト指向のインターフェイスを使用することをお勧めしますので、あなたの更新されたコードは明らかです。単一のiの違いは、見落とすのは簡単ですし、一般的にそれほど冗長ではありません。

つまり

、あなたの置き換えコードは次のようになります。

$stmt = $database->prepare("SELECT * FROM table WHERE field=?"); 
$stmt->bind_param('s', $filter); 
$res = $stmt->execute(); 

あなたがこれを行うことについて規律している場合は、すべてのSQLのミスをキャッチしなければなりません。

$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter"); 
$res = $stmt->execute(array('filter' => $filter)); 

通常、長期的にはあまりコードを意味します

PDOがあるため、名前付きパラメータのよりよいです。

+0

Hmmm。まずは、ありがとう。交換の迅速かつ汚れた落としを試みるという点は、テストの時間を節約することでした。私はあなたが答えなければならないことを知っていますが、あなたの答えを完全に突き止めるわけではありません。私はローカルのIDEにクローンすることを願っています。これは、mysqli *()を使ってテストできる場所で動作させることを意味します。私が何かを変えなければ、私はプロダクションサーバーに戻って、デモ後にそれを正しく修正することができます。私は最初に正しい時間があるとは思わない。 –

+0

ここに何らかのバージョンコントロールがあることを確認してください。変更を行うたびに、このコードが普及していることを確認し、他のものを混乱させないようにしたいでしょう。あなたはそれをよく見ている間にあなたのコードベースを改善する方法については、[PHP正しい方法](http://phptherightway.com)を見てください。 – tadman

+0

絶対に。ありがとうございました。プロジェクト全体が合計で10k行未満で、数年前に「CSS」を持っていましたが、基礎となるコードはすべて私のものです。 –

関連する問題