레이블이 PDO인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PDO인 게시물을 표시합니다. 모든 게시물 표시

2015년 1월 5일 월요일

bindParam / foreach, for 문등의 반복문 사용시 주의점

mysql_query 등 mysql_* 함수를 PDO로 변경하면서 bindParam 사용시 주의점.
bindParam의 변수 평가 시점에 따라 원하지 않은 결과가 나올 수 있다.

참고 : bindParam / bindValue 차이점 - (PHP PDO)


함수에서 배열로 변수를 받아 반복문 사용시 실수 하는 부분이다.(잘못된 예제)
$a['a'] = ':0';
$a['b'] = ':1';
$a['c'] = ':2';
$sth = $sth->prepare('SELECT name FROM students WHERE number_idx IN(".implode(",",$a).")');
foreach($a as $key=>$value) {
  $sth->bindParam($value,$key,PDO::PARAM_INT); 
} 
$sth->execute();

반복문을 실행시키더라도 execute(); 구문에서 변수가 평가되어 결과적으로 예상하지 않은 결과과 나오게 된다. bindValue로 변경시 원하는 결과를 얻을 수 있다.

2014년 12월 14일 일요일

MYSQL을 활용한 순번 출력

PHP에서 게시판 리스트 출력 및 순번을 필요로 한경우 변수에 count를 1씩 증가하기 위해 아래와 같은 코드를 사용한다.

$a = 0;
foreach($array as $value) {
   $a++;
   ...
}


간단하게 MYSQL에서 아래와 같이 처리할 수 있다.
$query = "SET @NUM := 0";
$sth     = $DB->exec($query);
$query = "SELECT
                  @NUM := @NUM+1 AS CNT
          FROM ....";
$sth = $DB->prepare($query);
$sth->execute();

2014년 11월 3일 월요일

PHP PDO_MYSQL 시작하기

PHP 5.5.0 부터 mysql_query,mysql_fetch_array 등등 mysql* 확장함수가 폐지되어 MYSQLi 또는 PDO_MYSQL로 변경되어야 한다.

무작정 PHP버전을 5.5 이상으로 끌어올리면 난감한 상황이 발생하게 된다.

처음 PDO를 접하는 개발자에게 도움이 될만한 튜토리얼이다.

http://prash.me/php-pdo-and-prepared-statements/

간단한 예로 fetch() 와 fetchAll의 차이점 / query, prepare 적용 시점 / 예외처리 등

2014년 10월 31일 금요일

bindParam / bindValue 차이점 - (PHP PDO)

메뉴얼에도 잘 나와있지만 bindParam과 bindValue 의 차이점에 대한 좋은 예이다.

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male' 

동일한 함수이지만 변수의 평가되는 시점에 차이가 있다.
http://stackoverflow.com/questions/1179874/pdo-bindparam-versus-bindvalue

참고
mysql_connect 등의 함수는 PHP 5.5.0부터 폐기되며, 향수 제거될 예정이라고 한다.
mysql_* 등의 함수는 MySQLi 또는 PDO_MYSQL로 사용해야 한다.
http://kr1.php.net/manual/en/function.mysql-connect.php