이전 글에서는 "PHP 데이터베이스 학습에서 PDO를 사용하여 데이터베이스에 연결하는 방법은?"을 가져왔습니다."에서는 PHP에서 PDO를 통해 데이터베이스에 연결하는 방법을 자세히 소개합니다. 이 기사에서는 계속해서 PDO를 사용하여 PHP에서 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(); } ?>
输出结果:
由上述示例可以看出,我们通过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(); } ?>
输出结果:
其中使用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()
방법exec() 을 사용할 수 있습니다. code> 메소드를 사용하여 성공적으로 실행한 후 반환된 결과는 영향을 받은 행의 수입니다.
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(); } ?>
로그인 후 복사
로그인 후 복사
출력 결과:
위의 예에서 볼 수 있듯이, 우리는 성공적으로 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출력 결과:
![1635391793553910.png PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?](https://img .php.cn/upload/image/882/104/990/1635391793553910.png)
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(); } ?>
로그인 후 복사
로그인 후 복사
输出结果:
![1635393389741332.png PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?](https://img.php.cn/upload/image/247/833/270/1635393389741332.png)
上述示例是使用命名形式的参数占位符,查询指定的 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(); } ?>
로그인 후 복사
로그인 후 복사
输出结果:
![1635393618451663.png PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?](https://img.php.cn/upload/image/727/730/881/1635393618451663.png)
由此我们便通过使用问号形式的参数占位符,查询指定的 SQL 语句。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
위 내용은 PHP 데이터베이스 학습: PDO를 사용하여 SQL 문을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!