무료 호스팅 서비스 hostinger를 사용하면서 예상치 않았던 난관이 있었어요
바로 서버에 php 5 가 설치되있었던건데요
이전 버전만 사용해 왔던 저는 php 5버전에서 사용되는 PDO를 이번에 익히게 되었습니다.
PDO(PHP Data Objects)란 여러가지 데이터베이스를 제어하는 방법을 표준화시킨 것으로 PDO를 사용하면 다양한 데이터베이스를 동일한 방법으로 제어할 수 있다고 합니다.
그래서 간단한 쿼리 사용 방법을 소개해보아요
1. 연결
먼저 database를 연결해야죠
기존에 해왔던 방식이에요
$db_host = "127.0.0.1";
$db_user = "유저아이디";
$db_password = "비밀번호";
$db_dbname = "DB이름";
$db_conn = mysql_connect($db_host, $db_user, $db_password);
mysql_select_db($db_dbname, $db_conn);
이거를 PDO 방식으로 바꿔보면
$pdo = new PDO('mysql:host='.$db_host.';dbname='.$db_dbname.';charset=utf8', $db_user, $db_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
2. select
기존의 쿼리 방식은
$email ="useremail@gmail.com";
$q = "select EMAIL from users where EMAIL= "$email";
$sql_result=mysql_query($q, $db_conn); // 쿼리를 날려서 결과를 저장하고
$count=mysql_num_rows($sql_result); // 쿼리 결과 카운트를 하고
이런 방식이었죠
php version 5 이상에서는 변수명을 바인딩 시켜줘야해요.
$email ="useremail@gmail.com";
$dbq = $pdo->prepare("select EMAIL from users where EMAIL= :email");
$dbq->bindParam(':email', $email, PDO::PARAM_STR); // 만약 변수가 숫자라면 PARAM_STR 대신 PARAM_INT
$dbq->execute(); // 쿼리 실행
$sql_result= $dbq->fetch(PDO::FETCH_ASSOC); // 쿼리 결과 저장
만약 쿼리 결과가 많을 것으로 예상되면
마지막 줄에
$sql_result= $dbq->fetchAll(PDO::FETCH_ASSOC); // 쿼리 결과 한꺼번에 저장
3. 예외처리
insert 나 update 는 결과 저장이나 카운트 없이 excute(); 까지만 하면 되요
만약 기존의 코드를 그대로 사용하고 싶으시다면 예외처리가 있습니다.
바로 @
// 예외처리
$db_conn = @mysql_connect($db_host, $db_user, $db_password);
@mysql_select_db($db_dbname, $db_conn);
$sql = "Insert into users (NAME,EMAIL,PASSWORD,SALT,created_at) values('$name','$email','$password','$salt' ,NOW())";
$dbq = @mysql_query($sql, $db_conn);
4. like
한가지 더 제가 해맸던 부분이 있습니다.
바로 like 함수 인데요
기존의 like 검색을 할 때 단어 앞이나 뒤에 %를 붙여줬어요
PDO를 사용할 경우 변수 대입 부분에서는 ? 를 사용하고 변수를 바인딩 시켜줍니다.
$searchKey = "user"
// $q="select * from users where users.id LIKE '%$searchKey%' ;"; // 기존 코드
$q="select * from users where users.id LIKE ? ;";
$dbq = $pdo->prepare($q);
$dbq->execute(array("%$searchKey%")); // 쿼리 실행
$sql_result= $dbq->fetchAll(PDO::FETCH_ASSOC); // 쿼리 결과 저장
그럼 20000.
'개발이야기 > JSON, Ajax, PHP, ASP, JSP' 카테고리의 다른 글
[Lavavel] 라라벨 마이그레이션 users 테이블 또는 뷰가 이미 존재 (0) | 2018.03.26 |
---|---|
[CodeIgniter] 코드이그나이터 index.php 죽이기 Not Found error (1) | 2016.08.13 |
[CodeIgniter] 코드이그나이터3 입문 404에러 (2) | 2016.08.13 |
[Ajax] javascript에서 만든 json 객체를 PHP에 POST로 보내서 사용하기 (6) | 2015.05.21 |