1

さて、PHP の専門家には次のような課題があります。

大量のファイルと関数に分散された膨大な数の MySql クエリを使用するアプリケーションを開発しています。これらのクエリは、明らかに、それらを含む関数から派生したいくつかのパラメーターを使用します。

私の目標は、これらすべてのクエリを単一の定数ファイルにグループ化しますが、機能を維持することです。例があります:

これは関数の例です:

public function doQuery ($aParameter) {
    .
    .
    .
    $sqlQuery = mysql_query("SELECT * FROM Table WHERE id = '".$aParameter."'");
    .
    .
    .
}

そして、これは定数を使用して、私がやりたいことです:

public function doQuery ($aParameter) {
    .
    .
    .
    $sqlQuery = mysql_query(THE_QUERY);
    .
    .
    .
}

ご覧のとおり、問題は、定義済みの定数をクエリとして使用すると、データベースから正しいデータを取得するために使用する必要があるパラメーターが失われることです。

最後の質問は次のとおりです。定数が使用されるときに決定される変数を含むことができる定数を定義する方法はありますか? 何かのようなもの:

define("THE_QUERY",     "SELECT * FROM Table WHERE id = '".$aParameter."'");
4

1 に答える 1

3

はい、パラメーター化されたクエリを使用します。

define("Q_QUERY1", "SELECT * FROM Table WHERE id = :1"); 
$cn = new PDO();
/* more code ... */
$arr = array();
$arr[":1"] = $parameterValue;

$s = $cn->prepare(Q_QUERY1);
$s->execute($arr);

主なアイデアは、クエリを格納するための定数またはファイルを用意することです (たとえば、sqlserver 用のクエリと mysql 用のクエリを作成できます...)。パラメータは、ある種のカスタムの認識可能な表記法 ( 、 など) で内部で宣言され:1ます:PARAM1。この場合のように、連想配列内で一致させる必要があります$arr[":1"]

この->executeメソッドは、パラメーターを値に一致させ、SQL インジェクションからクエリを保護し、必要に応じてパラメーターを引用符で囲みます。

特定のデータ型が必要な場合は、->bindParam代わりにメソッドを使用してPDO::PARAM_XXX、選択したパラメーターを指定する必要があります。詳細が必要な場合は、php のドキュメントが非常に役立ちます: http://php.net/manual/en/pdo.constants.php

于 2013-04-12T22:09:54.463 に答える