ホームページ >バックエンド開発 >PHPチュートリアル >PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

WBOY
WBOYオリジナル
2021-10-28 12:05:324101ブラウズ

前回の記事では「PHPデータベース学習:PDOを使ってデータベースに接続するには?」をお届けしました。 」では、PHP で PDO を介してデータベースに接続する方法が詳しく説明されています。この記事では、引き続き PDO を使用して PHP で SQL ステートメントを実行する方法を見ていきます。みんなが助けてくれるといいですね!

PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

前回の記事では、PHP が PDO を介してデータベースに接続する方法を学習しました。データベースに接続するには、SQL ステートメントを実行する必要があります。 PDO では、SQL ステートメントを実行する 3 つの方法、つまり exec() メソッド、query() メソッド、プリペアド ステートメント prepare() および # を使用できます。 ##execute() メソッド。それでは、一緒に見てみましょう。

<strong>exec() <span style="font-size: 20px;"></span></strong>メソッド

INSERTを実行するとき、UPDATE と DELETE、および結果セットを返す必要のないその他の SQL ステートメントでは、PDO オブジェクトで

exec() メソッドを使用できます。このメソッドを使用して実行が成功すると、返された結果が影響を受けます。

exec() メソッドの行数、構文形式は次のとおりです:

PDO::exec(string $sql)

注意してください:

  • $ sql は、実行される SQL ステートメントです。

  • exec() このメソッドは、SELECT クエリ ステートメントから対応する結果を取得しません。

次に、例を使用してデータベースにデータを追加してみます。例は次のとおりです:


<?php
    $dsn  = &#39;mysql:host=127.0.0.1;dbname=test&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try{
        $pdo = new PDO($dsn,$user,$pwd);
        $sql = "insert into user(name,age,sex) values(&#39;壹壹&#39;,&#39;21&#39;,&#39;男&#39;)";
        $res = $pdo -> exec($sql);
        if($res) echo &#39;成功添加 &#39;.$res.&#39; 条数据!&#39;;
    }catch(PDOException $e){
        echo &#39;数据库连接失败:&#39;.$e -> getMessage();
    }
?>

出力結果:


PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

上記の例からわかるように、exec() メソッドを通じてデータベースにデータを正常に追加しました。返された結果は、影響を受けたデータの数です。行。オブジェクトを返したい場合は、query() メソッドを使用できます。次に、SQL ステートメントを実行する別の方法、

query() メソッドを見てみましょう。

<strong>query() <span style="font-size: 20px;"></span></strong>メソッド

上記の例では

exec() メソッドは、結果セットを返す必要のないこれらのステートメント情報を返すことができます。結果セットを返す必要がある SELECT クエリ ステートメントを実行する場合は、query() ステートメントを渡す必要があります。このメソッドが正常に実行されると、悔い改めた本国は PDOStatement オブジェクトになります。

query() メソッドを使用し、取得したデータ行の合計数を知りたい場合は、PDOStatement オブジェクトの

rowCount() メソッドを使用して取得できます。 。

query() メソッドの構文形式は次のとおりです。


PDO::query(string $sql)
PDO::query(string $sql, int $PDO::FETCH_COLUMN, int $colno)
PDO::query(string $sql, int $PDO::FETCH_CLASS, string $classname, array $ctorargs)
PDO::query(string $sql, int $PDO::FETCH_INTO, object $object)

注意する必要があるのは、


$sql です。 は必須です 実行された SQL ステートメント。残りのパラメーターは、ステートメントのデフォルトのフェッチ モードを設定するために使用されます。これは、結果オブジェクトの PDOStatement::setFetchMode() メソッドを呼び出すことと同じです。

次に、query() メソッドを使用して、前に追加したデータをクエリします。例は次のとおりです:


<?php
    $dsn  = &#39;mysql:host=127.0.0.1;dbname=test&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try{
        $pdo = new PDO($dsn,$user,$pwd);
        $sql = "SELECT * FROM user WHERE name=&#39;壹壹&#39;";
        $res = $pdo -> query($sql,PDO::FETCH_ASSOC);
        print_r($res);
    }catch(PDOException $e){
        echo &#39;数据库连接失败:&#39;.$e -> getMessage();
    }
?>

出力結果:


PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

query() メソッドと exec() メソッドの使用には、次の注意点があります。

    # query() と exec() は両方ともすべての SQL ステートメントを実行できますが、戻り値は異なります;
  • query() は exec() のすべての関数を実現できます;
  • select ステートメントが exec() に適用されると、常に 0 が返されます;
  • クエリの特定の結果を確認したい場合場合は、foreach ステートメントを通じてループ出力を完了できます。

prepare()<strong><span style="font-size: 20px;"></span></strong> メソッドと execute() メソッド #異なるパラメータを繰り返し渡す必要がある場合、つまり、同じクエリを複数回実行する必要がある場合、準備されたステートメントを使用すると実装がより効率的になります。ステートメントを実行するには、PDO オブジェクトの prepare() メソッドを使用して実行するクエリを準備し、次に PDOStatement オブジェクトの

execute()

メソッドを使用してクエリを実行する必要があります。 。次に、prepare() メソッドと execute() メソッドを見てみましょう。 prepare() メソッドの構文形式は次のとおりです: <pre class="brush:php;toolbar:false">PDO::prepare(string $statement[, array $driver_options = array()])</pre> 次の点に注意してください:

$statement
    は、ターゲット データベースに対して有効な SQL ステートメント テンプレートである必要があります。
  • $driver_options
  • は、配列のオプションのパラメータであるオプションのパラメータを表します。型であり、返された PDOStatement オブジェクトのプロパティを設定するための 1 つ以上のキーと値のペアが含まれています。
  • execute() メソッドの構文形式は次のとおりです。

    PDOStatement::execute([array $input_parameters])
  • 注意すべき点は次のとおりです。
  • 参数 $input_parameters 为一个元素个数和将被执行的 SQL 语句中绑定的参数一样多的数组。

  • SQL 语句模板中可以包含零个或多个参数占位标记,格式可以是命名(:name)或问号(?)的形式,当它执行时将用真实数据取代。

  • 在同一个 SQL 语句里,命名和问号形式不能同时使用,只能选择其中一种参数形式。如果使用命名形式的占位标记,那么标记的命名必须是唯一的。

接下来我们看一下使用命名形式的参数占位符,查询指定的 SQL 语句,示例如下:

<?php
    $dsn  = &#39;mysql:host=127.0.0.1;dbname=test&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try{
        $pdo = new PDO($dsn,$user,$pwd);
        $sql = "SELECT name,age,sex FROM user WHERE age = :age";
        $sth = $pdo -> prepare($sql);
        $sth -> execute([&#39;:age&#39;=>11]);
        $res1 = $sth -> fetchAll();
        $sth -> execute(array(&#39;:age&#39;=>14));
        $res2 = $sth -> fetchAll();
        echo &#39;<pre class="brush:php;toolbar:false">&#39;;
        print_r($res1);
        print_r($res2);
    }catch(PDOException $e){
        echo &#39;数据库连接失败:&#39;.$e -> getMessage();
    }
?>

输出结果:

PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

上述示例是使用命名形式的参数占位符,查询指定的 SQL 语句,接下来我们看一下使用问号形式的参数占位符,查询指定的 SQL 语句。示例如下:

<?php
    $dsn  = &#39;mysql:host=127.0.0.1;dbname=test&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try{
        $pdo = new PDO($dsn,$user,$pwd);
        $sql = "SELECT name,age,sex FROM user WHERE age = ? AND sex = ?";
        $sth = $pdo -> prepare($sql);
        $sth -> execute([12,&#39;男&#39;]);
        $res1 = $sth -> fetchAll();
        $sth -> execute(array(11,&#39;女&#39;));
        $res2 = $sth -> fetchAll();
        echo &#39;<pre class="brush:php;toolbar:false">&#39;;
        print_r($res1);
        print_r($res2);
    }catch(PDOException $e){
        echo &#39;数据库连接失败:&#39;.$e -> getMessage();
    }
?>

输出结果:

PHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?

由此我们便通过使用问号形式的参数占位符,查询指定的 SQL 语句。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

以上がPHP データベースの学習: PDO を使用して SQL ステートメントを実行する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。