PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?
이전 글에서는 "PHP 데이터베이스 학습에서 PDO를 사용하여 데이터베이스에 연결하는 방법은?"을 가져왔습니다. "에서는 PHP에서 PDO를 통해 데이터베이스에 연결하는 방법을 자세히 소개합니다. 이 기사에서는 계속해서 PDO를 사용하여 PHP에서 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 = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; try{ $pdo = new PDO($dsn,$user,$pwd); $sql = "insert into user(name,age,sex) values('壹壹','21','男')"; $res = $pdo -> exec($sql); if($res) echo '成功添加 '.$res.' 条数据!'; }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
输出结果:
由上述示例可以看出,我们通过exec()方法成功的向数据库中加入了一条数据,并且返回的结果是收到影响的行数。想要返回一个对象的话就可以通过query() 方法,接下来我们看另一种执行SQL语句的方式:query()
方法。
<strong><span style="max-width:90%">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 = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; try{ $pdo = new PDO($dsn,$user,$pwd); $sql = "SELECT * FROM user WHERE name='壹壹'"; $res = $pdo -> query($sql,PDO::FETCH_ASSOC); print_r($res); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
输出结果:
其中使用 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>
방법
exec() </을 사용할 수 있습니다. code> 메소드를 사용하여 성공적으로 실행한 후 반환된 결과는 영향을 받은 행의 수입니다.<br/><p></p>exec() 메소드의 구문 형식은 다음과 같습니다. <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>PDOStatement::execute([array $input_parameters])</pre><div class="contentsignin">로그인 후 복사</div></div></p>다음에 유의해야 합니다. <ul style= "list-style-type: disc;"><li>🎜<code>$sql
은 실행할 SQL 문입니다. 🎜🎜exec()
메서드는 SELECT 쿼리 문에서 해당 결과를 가져오지 않습니다. 🎜🎜🎜🎜그런 다음 예제를 통해 데이터베이스에 데이터를 추가해 보겠습니다.🎜
<?php $dsn = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; try{ $pdo = new PDO($dsn,$user,$pwd); $sql = "SELECT name,age,sex FROM user WHERE age = :age"; $sth = $pdo -> prepare($sql); $sth -> execute([':age'=>11]); $res1 = $sth -> fetchAll(); $sth -> execute(array(':age'=>14)); $res2 = $sth -> fetchAll(); echo '<pre class="brush:php;toolbar:false">'; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
🎜🎜

query()
메서드를 살펴보겠습니다. 🎜🎜<strong><span style="max-width:90%">query() </span></strong>
메서드🎜🎜위의 예에서 exec()
메서드는 결과 집합을 반환할 필요가 없는 명령문 정보를 반환할 수 있습니다. SELECT 쿼리를 실행할 때 결과 세트인 명령문을 반환해야 하는 경우 query() 명령문을 전달해야 합니다. 이 메서드가 성공적으로 실행되면 회개한 국가는 PDOStatement
객체가 됩니다. 🎜🎜query() 메소드를 사용하고 얻은 총 데이터 행 수를 알고 싶다면 PDOStatement 객체의
rowCount()
메소드를 사용하여 얻을 수 있습니다. 🎜🎜query() 메서드의 구문 형식은 다음과 같습니다.🎜
<?php $dsn = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; 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,'男']); $res1 = $sth -> fetchAll(); $sth -> execute(array(11,'女')); $res2 = $sth -> fetchAll(); echo '<pre class="brush:php;toolbar:false">'; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
🎜🎜
$sql
은 실행될 SQL 문입니다. 나머지 매개변수는 다음과 같습니다. 명령문의 기본 페치 모드를 설정하려면 결과 객체 PDOStatement::setFetchMode() 메서드를 호출하는 것과 같습니다. 🎜🎜그런 다음 query() 메서드를 사용하여 앞서 추가한 데이터를 쿼리합니다.🎜rrreee🎜출력 결과:
🎜🎜

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 < /code>는 대상 데이터베이스에 유효한 SQL 문 템플릿이어야 함을 의미합니다. 🎜🎜<li>🎜<code>$driver_options
는 선택적 매개 변수를 나타내며 배열 유형의 선택적 매개 변수이며 하나 또는 더 많은 키-값 쌍, 반환된 PDOStatement 개체에 대한 속성을 설정합니다. 🎜🎜🎜🎜execute() 메서드의 구문 형식은 다음과 같습니다. 🎜rrreee🎜주의해야 할 사항은 다음과 같습니다. 🎜参数
$input_parameters
为一个元素个数和将被执行的 SQL 语句中绑定的参数一样多的数组。SQL 语句模板中可以包含零个或多个参数占位标记,格式可以是命名(:name)或问号(?)的形式,当它执行时将用真实数据取代。
在同一个 SQL 语句里,命名和问号形式不能同时使用,只能选择其中一种参数形式。如果使用命名形式的占位标记,那么标记的命名必须是唯一的。
接下来我们看一下使用命名形式的参数占位符,查询指定的 SQL 语句,示例如下:
<?php $dsn = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; try{ $pdo = new PDO($dsn,$user,$pwd); $sql = "SELECT name,age,sex FROM user WHERE age = :age"; $sth = $pdo -> prepare($sql); $sth -> execute([':age'=>11]); $res1 = $sth -> fetchAll(); $sth -> execute(array(':age'=>14)); $res2 = $sth -> fetchAll(); echo '<pre class="brush:php;toolbar:false">'; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
로그인 후 복사로그인 후 복사输出结果:
上述示例是使用命名形式的参数占位符,查询指定的 SQL 语句,接下来我们看一下使用问号形式的参数占位符,查询指定的 SQL 语句。示例如下:
<?php $dsn = 'mysql:host=127.0.0.1;dbname=test'; $user = 'root'; $pwd = 'root'; 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,'男']); $res1 = $sth -> fetchAll(); $sth -> execute(array(11,'女')); $res2 = $sth -> fetchAll(); echo '<pre class="brush:php;toolbar:false">'; print_r($res1); print_r($res2); }catch(PDOException $e){ echo '数据库连接失败:'.$e -> getMessage(); } ?>
로그인 후 복사로그인 후 복사输出结果:
由此我们便通过使用问号形式的参数占位符,查询指定的 SQL 语句。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
위 내용은 PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
- 🎜

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다
