>  기사  >  백엔드 개발  >  php_php 스킬에서 PDO 방식을 사용하는 방법에 대한 자세한 설명

php_php 스킬에서 PDO 방식을 사용하는 방법에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 20:27:15933검색

이 기사에서는 PHP에서 PDO를 사용하는 방법을 자세히 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

PDO::exec: 결과에 영향을 미치는 항목 수를 나타내는 int 유형을 반환합니다.

코드 복사 코드는 다음과 같습니다.
PDOStatement::execute

부울 유형을 반환합니다. true는 실행 성공을 나타내고, false는 실행 실패를 나타냅니다. 이 두 가지는 일반적으로 다음 코드에 나타납니다.

코드 복사 코드는 다음과 같습니다.
$rs0 = $pdo->exec($sql);
$pre = $pdo->prepare($sql);
$rs1 = $pre->execute();

일반적으로 $rs0 값을 사용하여 SQL 실행 성공 여부를 확인할 수 있습니다. 값이 false이면 SQL 실행이 실패했음을 의미하고, 0은 변경 사항이 없음을 의미하며, 0보다 큰 값을 의미합니다. 영향을 받은 기록의 수.

그러나 $rs1은 SQL 실행 성공 여부만 반환할 수 있습니다. 영향을 받은 레코드 수를 가져와야 하는 경우 $pre->rowCount();

를 사용해야 합니다.

저는 개인적으로 MySQL을 사용하는 것을 좋아해서 Extensions.ini에 다음 두 줄을 넣어두었습니다.

코드 복사 코드는 다음과 같습니다.
extension=pdo.so
확장명=pdo_mysql.so

그러면 프로그램의 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
define('DB_NAME','test')
정의('DB_USER','테스트')
정의('DB_PASSWD','테스트')
정의('DB_HOST','localhost')
정의('DB_TYPE','mysql')
$dbh = 새 PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWD);

이 글에서 상수 설정을 사용하는 것은 저처럼 번거로울 필요는 없습니다. 위의 작업을 수행할 때 $dbh 자체가 PDO의 연결을 나타냅니다.

첫 번째, 게으른 방법 쿼리, 아무것도 생각하지 말고 평소대로 쿼리 기능을 사용하세요. 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
$sql = 'select * from test'
foreach( $dbh->query($sql)를 $value로)
{
에코 $값[열]; };

두 번째 방법은 prepare를 자동으로 가져오는 것입니다. PDO를 사용한 후 prepare 함수를 사용하여 작업을 수행하는 것을 선호합니다. SQL 코드를 먼저 작성하고 나중에 자동으로 가져올 수 있다는 것입니다. 필요한 정보를 제공합니다. 이것의 가장 큰 장점은 쿼리를 직접 사용하는 것에 비해 많은 보안 문제를 줄일 수 있다는 점이라고 생각합니다. 먼저 prepare를 사용하여 SQL 코드를 설정한 다음, binparm을 사용하여 설정 작업을 수행합니다. :


코드 복사 코드는 다음과 같습니다.
$sth = $dbh->prepare('update db set zh_CN = :str 여기서 SN=:SN')
$sth->bindParam(':str',$str,PDO::PARAM_STR,12)
$sth->bindParam(':SN',$SN)
$sth->execute();
본문에서 :str 및 :SN을 주의하세요.bindParam 함수를 사용할 때 :word를 사용하여 시스템이 적용해야 하는 부분을 지정할 수 있습니다. 예를 들어 지정하려면 :str 및 :SN을 사용합니다. 실제 내용은 BindParam에 따라 다르며 입력하려는 유형을 지정할 수도 있습니다.
먼저 :str의 사양을 살펴보겠습니다. :str 데이터가 텍스트라고 확신하므로 PD::PARAM_STR을 사용하여 프로그램에 "이것은 문자열입니다"라고 알리고 범위를 지정합니다. 즉, 길이는 12자 비트입니다.

bindParam을 사용하여 지정하더라도 :SN과 같이 덜 복잡할 수도 있지만 유형과 길이를 생략하면 PHP는 변수의 기본 유형을 사용하여 적용합니다.

마지막으로 $sth->execute();를 사용하여 실행 작업을 수행하는 것입니다. 기본적으로는 어렵지 않으며 매우 간단하다고 할 수도 있습니다.

반복적으로 적용해야 할 데이터가 많은 경우에는 my :str, :SN 등 꼭 BindParam을 재사용하여 지정할 수도 있습니다. 데이터가 10개라면 직접 추가할 수도 있습니다. 이 라이브러리와 같은 데이터의 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다.
$sth = $dbh->prepare('db에 삽입 ("zh_CN","zh_TW")values(:str , :SN');
foreach ($array => $value )
{
$sth->bindParam(':str',$value[str],PDO::PARAM_STR,12)
$sth->bindParam(':SN',$value[SN])
$sth->실행()
}

내 친구처럼 강한 사람들도 가능한 모든 SQL을 파일 뒤에 작성하는데, 나중에 프로세스 SQL 부분은 모두 변수와 함께 가져옵니다. 어쨌든 데이터는 미리 만들어진 방식으로 적용할 수 있습니다. 그런 다음 prepare 메소드를 사용하여 선택하면 위와 같이 word를 사용하여 키워드를 지정할 수도 있으며 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다.
$sth = $dbh->prepare('select * from db 여기서 SN = :SN')
$sth->bindParam(':SN',$value[SN])
$sth->실행()
while($meta = $sth->fetch(PDO::FETCH_ASSOC))
{
에코 $meta["이름"]; }

새로 나타나는 것은 fetch입니다. 이는 mysql_fetch_row()와 비슷한 의미를 갖지만 fetch()에는 PDO::FETCH_ASSOC라는 추가 항목이 있습니다.

fetch()는 데이터를 얻는 다양한 방법을 제공하며 PDO::FETCH_ASSOC는 다음 데이터의 필드 이름과 값을 반환하는 것을 참조합니다

예를 들어 위의 예에서 $meta를 사용하여 fetch로 반환된 데이터를 가져옵니다. 이때 $meta의 요소 이름은 데이터베이스의 필드 이름이고 내용은 물론 값 자체입니다. 이는 mysql_fetch_row()를 사용할 때와 다릅니다. 왜냐하면 mysql_fetch_row()는 필드 외에 일련 번호를 기반으로 하는 요소 이름도 제공하기 때문입니다.

물론 PDO::FETCH_ASSOC를 PDO::FETCH_BOTH로 변경하는 한 사용법은 mysql_fetch_row()와 동일합니다.

문제 해결 방법

디버깅은 모든 프로그래머에게 영원한 고통입니다. PDO를 사용하여 디버깅하려면 어떻게 해야 할까요?

사실 PDO는 이미 errorInfo()와 errorCode() 두 가지 매우 편리한 함수를 제공하고 있습니다

사용법도 매우 간단합니다. 실행할 때마다 오류가 있으면 errorInfo() 및 errorCode()에 내용이 있습니다. 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다.$sth = $dbh->prepare('select * from db 여기서 SN = :SN')
$sth->bindParam(':SN',$value[SN])
$sth->실행()
if ($sth->errorCode())
{
echo "오류가 발생했습니다! 오류가 발생했습니다!"; print_r($sth->errorInfo())
}

그리고 $sth->errorInfo()는 배열이 됩니다. 이 배열에는 세 가지 값이 있습니다.
0은 SQLSTATE 오류 코드입니다
1은 사용 중인 드라이버에서 반환된 오류 코드입니다

2 사용 중인 드라이버에서 반환된 오류 메시지

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

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