2
function get_actor_info( $actor_id ) {

    global $pdo;

    $stmt = $pdo->prepare('
            SELECT film_info, first_name, last_name 
            FROM actor_info
            WHERE actor_id = :actor_id
            LIMIT 1');

    $stmt->execute( array( ':actor_id' => $actor_id ) );

    return $stmt->fetch( PDO::FETCH_OBJ );
}

上記の例では、なぜ MYSQL が WHERE... を選択し、:actor_idその後にこの:列が続き、同じことがreturn $stmt->fetch( PDO::FETCH_OBJ );なぜ二重列を使用するのですか?

4

5 に答える 5

3

文字列 :actor_id は変数ではありません。実際の変数 $actor_id 値を SQL 文字列にバインドするためのプレースホルダーです。

$stmt 文字列は、プレースホルダーを含むクエリです。

where 句の実際の値は、実行時に execute() メソッドを使用して渡されます。

なぜこれをしたいのですか?PDO は準備されたステートメントを許可し、そのバインディングは、$actor_id を SQL 文字列に連結するだけの場合と同様に、変数の文字列をエスケープする必要を抽象化するのに役立ちます。

これは、クエリの再利用性とセキュリティに役立ちます。

于 2012-10-05T04:21:05.783 に答える
2

:colunm_nameのように、プレースホルダーとして使用され?ます。

違いは、:column_name連想配列を使用してパラメーターをバインドできることです。

于 2012-10-05T04:22:03.963 に答える
1

最後のダブルコロンが全然違います。これは、クエリ内の単一のコロンとはまったく関係のない別の種類の表記です。

二重コロンは、クラスで定義されている定数または関数にアクセスすることを意味します。オブジェクトで定義されている場合は、より使い慣れた->表記法を使用します。この場合FETCH_OBJ、特定の PDO オブジェクトではなく、PDO クラス自体の内部の定数です。その定数を引数として に渡すとfetch()、配列ではなくオブジェクトの形式で行を返すように関数に指示します。

二重コロンはスコープ解決演算子と呼ばれます。また、ヘブライ語で「二重コロン」を表す「paamayim nekudotayim」という名前もあり、おそらくコンピューター サイエンスの歴史の中で最悪の命名規則の選択の 1 つです。

于 2012-10-05T04:41:23.477 に答える
1

上記の例の最初の質問 なぜ MYSQL が WHERE... :actor _id の後に this : コロンを選択するのか

$stmt->execute( array( ':actor_id' => $actor_id ) );

このステートメントは、プレースホルダーを呼び出す変数のようなものを使用しています。コロンを使用すると、変数を sql に解析できます。

第二部..

return $stmt->fetch( PDO::FETCH_OBJ )二重列を使用する理由

これは、定義がPDOの特定のオブジェクトをターゲットにしているためです。

于 2012-10-28T07:20:22.020 に答える
0

このチュートリアルを読んで、PDO の基礎を学んで ください。

于 2012-10-05T04:24:35.320 に答える