PHP PDO 데이터베이스 조작 예 처리 및 주의사항
PDO 는 PHP 가 각종 데이터 베 이 스 를 방문 하 는 데 경량급 일치 성 인 터 페 이 스 를 정의 했다.모든 데이터 베 이 스 는 일치 하 는 방법 으로 조회 와 데 이 터 를 얻 을 수 있 고 서로 다른 데이터 베이스 간 의 차 이 를 고려 하지 않 아 도 데이터 베이스 작업 을 크게 간소화 했다.PDO 를 사용 하면 mysql,postgresql,oracle,mssql 등 다양한 데이터 베 이 스 를 지원 할 수 있 습 니 다.
예 처리 가 무엇 입 니까?
성숙 한 데이터 베 이 스 는 전처리 문(Prepared Statements)의 개념 을 지원 합 니 다.
그것들 은 무엇 입 니까?컴 파일 된 SQL 구문 템 플 릿 이 라 고 생각 하고 서로 다른 변수 매개 변 수 를 사용 하여 맞 출 수 있 습 니 다.
예비 처리 문 구 는 두 가지 주요 한 장점 을 가지 고 있다.
1.조 회 는 한 번 만 해석(또는 준비)되 지만 같은 매개 변 수 를 사용 하여 여러 번 수행 할 수 있 습 니 다.조회 준비(Prepared)가 되면 데이터 베 이 스 는 분석 하고 컴 파일 하 며 조회 계획 을 최적화 합 니 다.
복잡 한 조회 에 있어 서로 다른 매개 변수 가 있 지만 구조 가 같은 조 회 를 여러 번 반복 하려 면 이 과정 은 많은 시간 을 차지 하여 응용 이 느 려 집 니 다.
예비 처리 문 구 를 사용 하면 중복 분석,컴 파일,최적화 절 차 를 피 할 수 있다.쉽게 말 하면 예비 처리 문 구 는 더 적은 자원 을 사용 하고 실행 속도 도 빠르다.
2.예비 처리 문 구 를 전달 하 는 매개 변 수 는 따옴표 를 사용 하지 않 아 도 되 고 바 텀 구동 은 이 를 처리 할 것 입 니 다.
만약 당신 의 응용 프로그램 이 예 처리 문장 을 독점 적 으로 사용한다 면,SQL 주입 이 일어나 지 않 을 것 이 라 고 확신 할 수 있 습 니 다.
코드 데모:
<?php
header('content-type:text/html; charset=utf-8');
// pdo
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;', 'root', '888888');
// query sql
$pdo->query('set names utf8');
//
$sql = "insert into persons (name,age) values (?, ?);";
$preObj = $pdo->prepare($sql);
$res = $preObj->execute(array(' ', 22));
var_dump($res);
//
$sql = "delete from persons where id = ?";
$preObj = $pdo->prepare($sql);
$res = $preObj->execute(array(3));
var_dump($res);
//
$sql = "update persons set name = ? where id = ?;";
$preObj = $pdo->prepare($sql);
$res = $preObj->execute(array('lucy', 5));
var_dump($res);
//
$sql = "select * from persons where age > ? order by id desc;";
$preObj = $pdo->prepare($sql);
$preObj->execute(array(20));
$arr = $preObj->fetchAll(PDO::FETCH_ASSOC);
/*
* FETCH_BOTH , , 。
* FETCH_ASSOC 。
* PDO::FETCH_NUM
* PDO::FETCH_OBJ
*/
print_r($arr);
만약 당신 이 pdo 예비 처 리 를 사용 하여 데 이 터 를 삽입 할 때,오 류 를 보고 합 니 다.
<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('INSERT INTO room (create_time,create_uid,exp_time,is_private) VALUES (?,?,?,?)');
$rs = $sth->execute(["2018-05-14 14:10:04",0,1526278504,1]);
var_dump($sth->errorInfo());exit;
잘못 을 보고 하 다array (size=3)
0 => string 'HY000' (length=5)
1 => int 1364
2 => string 'Field 'id' doesn't have a default value' (length=39)
이것 은 당신 이 디자인 한 시계의 메 인 키 가 없 기 때 문 입 니 다
auto_increment
해결 방법자체 성장 또는 예비 처리 문 에 홈 키 필드 를 추가 할 수 있 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.