>  기사  >  백엔드 개발  >  PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?

PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?

WBOY
WBOY원래의
2021-10-28 12:05:324051검색

이전 글에서는 "PHP 데이터베이스 학습에서 PDO를 사용하여 데이터베이스에 연결하는 방법은?"을 가져왔습니다. "에서는 PHP에서 PDO를 통해 데이터베이스에 연결하는 방법을 자세히 소개합니다. 이 기사에서는 계속해서 PDO를 사용하여 PHP에서 SQL 문을 실행하는 방법을 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다!

PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?

이전 글에서는 PHP가 PDO를 통해 데이터베이스에 연결하는 방법을 배웠습니다. 데이터베이스에 연결하려면 SQL 문을 실행해야 합니다. PDO에서는 SQL 문을 실행하는 세 가지 방법, 즉 exec() 메서드, query() 메서드 및 준비된 문 prepare( )를 사용할 수 있습니다. execute() 메서드. 그럼 함께 살펴볼까요? exec() 方法,query() 方法,以及预处理语句 prepare()execute() 方法。那接下来我们一起来看一下吧。

<strong><span style="font-size: 20px;">exec() </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><span style="font-size: 20px;">query() </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 语句完成循环输出。

<strong><span style="font-size: 20px;">prepare()</span></strong>execute() 方法

当有需要迭代传入不同参数的时候,也就是方同一个查询需要多次执行的时候,使用预处理语句的方式会让实现效率更高,使用预处理语句就需要用到PDO对象中的 prepare() 方法去准备一个将要执行的查询,再使用 PDOStatement 对象中的 execute() 方法来执行。那接下来我们就来看一下prepare() execute() 方法。

prepare() 方法的语法格式如下:

PDO::prepare(string $statement[, array $driver_options = array()])

其中需要注意的是:

  • $statement   表示的是必须是对目标数据库有效的 SQL 语句模板;

  • $driver_options

    <strong><span style="font-size: 20px;">exec() </span></strong>방법
INSERT, UPDATE, DELETE 및 결과 집합을 반환할 필요가 없는 기타 SQL 문을 실행할 때 PDO 개체에서 exec() 을 사용할 수 있습니다. code> 메소드를 사용하여 성공적으로 실행한 후 반환된 결과는 영향을 받은 행의 수입니다.<br><p></p>exec() 메소드의 구문 형식은 다음과 같습니다. <p><pre class="brush:php;toolbar:false">PDOStatement::execute([array $input_parameters])</pre></p>다음에 유의해야 합니다. <ul style="list-style-type: disc;"> <li>🎜<code>$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 = "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 문을 실행하는 방법은 무엇입니까?🎜🎜위의 예에서 볼 수 있듯이, 우리는 성공적으로 exec() 메소드를 전달했습니다. 데이터 조각이 데이터베이스에 추가되고 반환된 결과는 영향을 받은 행의 수입니다. 객체를 반환하려면 query() 메서드를 사용할 수 있습니다. 다음으로 SQL 문을 실행하는 또 다른 방법인 query() 메서드를 살펴보겠습니다. 🎜🎜<strong><span style="max-width:90%">query() </span></strong>메서드🎜🎜위의 예에서 exec() 메서드는 결과 집합을 반환할 필요가 없는 명령문 정보를 반환할 수 있습니다. SELECT 쿼리를 실행할 때 결과 세트인 명령문을 반환해야 하는 경우 query() 명령문을 전달해야 합니다. 이 메서드가 성공적으로 실행되면 회개한 국가는 PDOStatement 객체가 됩니다.
    🎜🎜query() 메소드를 사용하고 얻은 총 데이터 행 수를 알고 싶다면 PDOStatement 객체의 rowCount() 메소드를 사용하여 얻을 수 있습니다. 🎜🎜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 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();
        }
    ?>
    🎜주의해야 할 점:
    🎜🎜$sql 은 실행될 SQL 문입니다. 나머지 매개변수는 다음과 같습니다. 명령문의 기본 페치 모드를 설정하려면 결과 객체 PDOStatement::setFetchMode() 메서드를 호출하는 것과 같습니다. 🎜🎜그런 다음 query() 메서드를 사용하여 앞서 추가한 데이터를 쿼리합니다.
    🎜rrreee🎜출력 결과:
    🎜🎜PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?🎜🎜 query() 를 사용하고 exec() 메서드에는 다음과 같은 주의 사항이 있습니다. 🎜
    • query()와 exec() 모두 모든 SQL을 실행할 수 있습니다. 🎜🎜
    • 🎜query()는 exec()의 모든 기능을 구현할 수 있습니다. 🎜🎜
    • 🎜select 문을 exec()에 적용하면 항상 0을 반환합니다.
    • 🎜쿼리의 구체적인 결과를 보려면 foreach 문을 통해 루프 출력을 완료하면 됩니다. 🎜🎜🎜🎜<strong><span style="font-size: 20px;">준비()</span></strong>execute() 메소드🎜🎜다른 매개변수를 반복적으로 전달해야 하는 경우, 즉 동일한 쿼리를 여러 번 실행해야 하는 경우 , 준비된 문을 사용하면 구현이 더 효율적이 됩니다. 준비된 문을 사용하려면 PDO 개체의 prepare() 메서드를 사용하여 실행할 쿼리를 준비한 다음 를 사용해야 합니다. >prepare() 메서드를 PDOStatement 개체의 execute() 메서드로 실행합니다. 그런 다음 prepare()execute() 메서드를 살펴보겠습니다. 🎜🎜prepare() 메서드의 구문 형식은 다음과 같습니다. 🎜rrreee🎜다음 사항에 유의해야 합니다. 🎜
      • 🎜$statement 는 대상 데이터베이스에 유효한 SQL 문 템플릿이어야 함을 의미합니다. 🎜🎜<li>🎜<code>$driver_options는 선택적 매개 변수를 나타내며 배열 유형의 선택적 매개 변수이며 하나 또는 더 많은 키-값 쌍, 반환된 PDOStatement 개체에 대한 속성을 설정합니다. 🎜🎜🎜🎜execute() 메서드의 구문 형식은 다음과 같습니다. 🎜rrreee🎜주의해야 할 사항은 다음과 같습니다. 🎜
        • 参数 $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.