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

WBOY
풀어 주다: 2023-04-10 18:52:02
원래의
3921명이 탐색했습니다.

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

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

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

exec() 方法

在我们执行 INSERT、UPDATE 和 DELETE 等这些不需要返回结果集的SQL语句的时候,我们就可以使用PDO对象中的exec()方法,使用这种方法成功执行之后,返回的结果是受到影响的行数,

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

PDO::exec(string $sql)
로그인 후 복사

要注意的是:

  • $sql为要执行的 SQL 语句。

  • exec()方法不会从 SELECT 查询语句中获取相应的结果。

那接下来我们通过实例尝试向数据库中加入一条数据,示例如下:

 exec($sql); if($res) echo '成功添加 '.$res.' 条数据!'; }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
로그인 후 복사

输出结果:

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

由上述示例可以看出,我们通过exec()方法成功的向数据库中加入了一条数据,并且返回的结果是收到影响的行数。想要返回一个对象的话就可以通过query() 方法,接下来我们看另一种执行SQL语句的方式:query()方法。

query() 方法

在上述事例中通过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()方法来查询我们前面添加的那条数据,示例如下:

 query($sql,PDO::FETCH_ASSOC); print_r($res); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
로그인 후 복사

输出结果:

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

其中使用query()exec()方法有以下几点需要注意:

  • query() 和 exec() 都可以执行所有的 SQL 语句,只是返回值不同而已;

  • query() 可以实现所有 exec() 的功能;

  • 当把 select 语句应用到 exec() 时,总是返回 0;

  • 如果要看查询的具体结果,可以通过 foreach 语句完成循环输出。

prepare()execute()方法

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

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

PDO::prepare(string $statement[, array $driver_options = array()])
로그인 후 복사

其中需要注意的是:

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

  • $driver_options

    exec() 방법
INSERT, UPDATE, DELETE 및 결과 집합을 반환할 필요가 없는 기타 SQL 문을 실행할 때 PDO 개체에서 exec() 메소드를 사용하여 성공적으로 실행한 후 반환된 결과는 영향을 받은 행의 수입니다.

exec() 메소드의 구문 형식은 다음과 같습니다.

PDOStatement::execute([array $input_parameters])
로그인 후 복사

다음에 유의해야 합니다.
  • $sql은 실행할 SQL 문입니다.
  • exec()메서드는 SELECT 쿼리 문에서 해당 결과를 가져오지 않습니다. 그런 다음 예제를 통해 데이터베이스에 데이터를 추가해 보겠습니다.
     prepare($sql); $sth -> execute([':age'=>11]); $res1 = $sth -> fetchAll(); $sth -> execute(array(':age'=>14)); $res2 = $sth -> fetchAll(); echo '
    '; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
    로그인 후 복사
    로그인 후 복사
    출력 결과:
    PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?위의 예에서 볼 수 있듯이, 우리는 성공적으로 exec() 메소드를 전달했습니다. 데이터 조각이 데이터베이스에 추가되고 반환된 결과는 영향을 받은 행의 수입니다. 객체를 반환하려면 query() 메서드를 사용할 수 있습니다. 다음으로 SQL 문을 실행하는 또 다른 방법인query()메서드를 살펴보겠습니다.query() 메서드위의 예에서exec()메서드는 결과 집합을 반환할 필요가 없는 명령문 정보를 반환할 수 있습니다. SELECT 쿼리를 실행할 때 결과 세트인 명령문을 반환해야 하는 경우 query() 명령문을 전달해야 합니다. 이 메서드가 성공적으로 실행되면 회개한 국가는PDOStatement객체가 됩니다.
    query() 메소드를 사용하고 얻은 총 데이터 행 수를 알고 싶다면 PDOStatement 객체의rowCount()메소드를 사용하여 얻을 수 있습니다. query() 메서드의 구문 형식은 다음과 같습니다.
     prepare($sql); $sth -> execute([12,'男']); $res1 = $sth -> fetchAll(); $sth -> execute(array(11,'女')); $res2 = $sth -> fetchAll(); echo '
    '; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
    로그인 후 복사
    로그인 후 복사
    주의해야 할 점:
    $sql은 실행될 SQL 문입니다. 나머지 매개변수는 다음과 같습니다. 명령문의 기본 페치 모드를 설정하려면 결과 객체 PDOStatement::setFetchMode() 메서드를 호출하는 것과 같습니다. 그런 다음 query() 메서드를 사용하여 앞서 추가한 데이터를 쿼리합니다.
    rrreee출력 결과:
    PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?query()를 사용하고exec()메서드에는 다음과 같은 주의 사항이 있습니다.
    • query()와 exec() 모두 모든 SQL을 실행할 수 있습니다.
    • query()는 exec()의 모든 기능을 구현할 수 있습니다.
    • select 문을 exec()에 적용하면 항상 0을 반환합니다.
    • 쿼리의 구체적인 결과를 보려면 foreach 문을 통해 루프 출력을 완료하면 됩니다.준비()execute()메소드다른 매개변수를 반복적으로 전달해야 하는 경우, 즉 동일한 쿼리를 여러 번 실행해야 하는 경우 , 준비된 문을 사용하면 구현이 더 효율적이 됩니다. 준비된 문을 사용하려면 PDO 개체의prepare()메서드를 사용하여 실행할 쿼리를 준비한 다음를 사용해야 합니다. >prepare()메서드를 PDOStatement 개체의execute()메서드로 실행합니다. 그런 다음prepare()execute()메서드를 살펴보겠습니다. prepare() 메서드의 구문 형식은 다음과 같습니다. rrreee다음 사항에 유의해야 합니다.
      • $statement < /code>는 대상 데이터베이스에 유효한 SQL 문 템플릿이어야 함을 의미합니다.
      • $driver_options는 선택적 매개 변수를 나타내며 배열 유형의 선택적 매개 변수이며 하나 또는 더 많은 키-값 쌍, 반환된 PDOStatement 개체에 대한 속성을 설정합니다. execute() 메서드의 구문 형식은 다음과 같습니다. rrreee주의해야 할 사항은 다음과 같습니다.
        • 参数$input_parameters为一个元素个数和将被执行的 SQL 语句中绑定的参数一样多的数组。

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

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

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

         prepare($sql); $sth -> execute([':age'=>11]); $res1 = $sth -> fetchAll(); $sth -> execute(array(':age'=>14)); $res2 = $sth -> fetchAll(); echo '
        '; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
        로그인 후 복사
        로그인 후 복사

        输出结果:

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

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

         prepare($sql); $sth -> execute([12,'男']); $res1 = $sth -> fetchAll(); $sth -> execute(array(11,'女')); $res2 = $sth -> fetchAll(); echo '
        '; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
        로그인 후 복사
        로그인 후 복사

        输出结果:

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

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

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

        위 내용은 PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!