프로그램/php2015. 6. 2. 16:13
반응형

PHP PDO를 이용해서 Query문 작성 중 LIMIT ?, ? 처럼 동적으로 값이 변경이 되는 LIMIT를 사용하기 위해서

PDOStatement::bindValue 를 사용해서 구현할 수 있다.

 

$dbh = dbhOpen(‘데이터베이스');

 

$res = $dbh->prepare("SELECT * FROM 테이블 WHERE num = :num AND name = :name ORDER BY uq LIMIT :s, :cnt");

 

$res->bindValue(':num', (int)$num, PDO::PARAM_INT);

$res->bindValue(':name', $name, PDO::PARAM_STR);

$res->bindValue(':s', (int)$s, PDO::PARAM_INT);

$res->bindValue(':cnt', (int)$cnt, PDO::PARAM_INT);

 

$res->execute();

 

//echo "<br />query = " . $res->queryString;  // 사용한 쿼리문 출력(":변수" 값은 알 수 없다.)

 

dbhClose($dbh);

$res = null;


 

 

더보기>

- php pdo 설치하기 / pdo-mysql 모듈 추가 설치하기 / SQLInjection 공격 / 보안

- php pdo db 연결 / pdo db connection / pdo database 접속 / pdo db open

- php pdo like 사용법 / pdo query like / pdo mysql like / pdo bindValue

반응형
Posted by 은둔고수
프로그램/php2015. 5. 28. 14:50
반응형

PHP PDO(PHP 5.1.0부터 제공)를 사용하게 되면 같은 코드로 여러 종류(예>MySQL, SQLite, 기타 등등)의 데이터베이스(DateBase) 연결에 사용할 수 있게 된다.

그리고 무엇보다도 SQL 인젝션(SQLInject) 공격을 걱정하지 않아도 된다.

중요> PHP 5.5 부터는 mysql_connect(), mysql_query() 등과 같은 mysql_ 로 시작하는 함수는 사용할 수 없게 되므로 PDO 또는 MYSQLi를 사용하도록 미리 준비하는 것을 권장한다.

 

 

[PDO-MySQL 모듈 설치 소스 하기]

PDD-Mysql 모듈은 기본 제공으로 PHP 설치 소스 경로로 이동한 후 진행한다.

(없으면 다운 받는다.)

참고>PDO-Mysql 모듈 다운받기

]# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

]# tar xvzf PDO_MYSQL-1.0.2.tgz

]# cd PDO_MYSQL-1.0.2

 

 

[PDO 설치 학인]

phpinfo()를 통해서 확인할 수 있다.  

... 생략 ...

 

또는

]# /usr/local/php/bin/php -i | grep PDO

 

 

 

 

 

[PDO-Mysql 모듈 추가 설치] : PHP 설치 Configure 옵션에 추가되지 않는다.

php 설치 소스로 이동한다.

]# cd /usr/local/src/apm/

]# ll

 

 

 

 

 

 

만일을 대비해 백업을 해둔다.

]# mkdir php-5.4.2_bk

]# cp -r php-5.4.2/* php-5.4.2_bk/

PDO-Mysql 모듈이 있는 위치로 이동한다.

]# cd php-5.4.2/ext/pdo_mysql/

]# ll

 

 

 

 

 

phpize명령어를 사용해서 확장모듈(여기서는 PDO-Mysql)을 위한 빌드 환경을 만든다.

]# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:  20100412

Zend Module Api No:  20100525

Zend Extension Api No:  22100525

참고>phpize 실행파일이 해당위치에 없다면 find / -name phpize를 실행해서 찾는다.

 

 

 

 

참고>phpize를 실행하면 configure 파일 및 기타 파일들이 생성된다.

- Cannot find autoconf 오류 발생시

 

 

컴파일을 한다.

]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql

]# make

]# make install

 

 

 

 

모듈 생성 확인

컴파일이 완료되면 /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 와 비슷한 경로를 찾은 후 pdo_mysql.so 파일이 생성되었는지 확인한다.

참고> 기존에 다른 확장 모듈을 추가했다면 다른 모듈 파일도 같은 경로에 있는 것을 확인할 수 있다.

 

 

 

 

PDO-Mysql 모듈 연동

php.ini 파일을 아래와 같이 수정한다.

]# vi /usr/local/apache/conf/php.ini

extension_dir = /usr/local/php/lib/php/extensions/no-debug-zts-20100525” <- 변경

extension=pdo_mysql.so <- 추가

apache를 재 시작한다.

]# service httpd restart

phpinfo()를 이용해서 PDO-Mysql활성화되었는지 확인한다.

]# /usr/local/php/bin/php -i | grep PDO

 

 


 

더보기>

- php pdo db 연결 / pdo db connection / pdo database 접속 / pdo db open

- php pdo limit 사용법 / pdo query limit offset / pdo mysql limit / pdo bindValue

- php pdo like 사용법 / pdo query like / pdo mysql like / pdo bindValue

반응형
Posted by 은둔고수
반응형

jquery를 이용해서 스크롤을 지정한 위치까지 내리면 위로 버튼을 하단 오른쪽에 보여주고 클릭하면 화면 제일 상단으로 이동한다.

모바일웹에서도 사용할 수 있다.

 

 

예> html

<!-- 버튼 : 위로 -->
<button type="button" class="btn_up_layer">위로</button>

 

 

예> css

/* 버튼 : 위로 */
.btn_up_layer {position:absolute;top:0;right:30px;display:none;padding:5px 10px;z-index:1;}

 

 

예> javascript + jquery

/* 위로
스크롤이 특정 위치로 이동하면 위로버튼이 나타난다.
위로버튼을 클릭하면 상단으로 이동
*/
function btn_mv_up(oj) {
 if(!oj) return false;

 var st = $(window).scrollTop();
 var h = $(window).height();

 $(oj).stop().hide().css('top',h + st - 50);    // 스크롤 이동에 따른 위로버튼의 위치 이동
 if(st > 900) { $(oj).fadeIn(); }    // 위로버튼을 보여주는 위치 지정
 else if(st < 900) { $(oj).stop().fadeOut(); }    // 위로버튼을 숨기는 위치 지정

}

 

// 위로 버튼
 $(document).scroll(function() {
  btn_mv_up('.btn_up_layer');
 }).on('click', '.btn_up_layer', function() {
  $("html, body").animate({scrollTop:0}, 'slow');
 });

 

 



더보기>

- jquery 스크롤(scroll) 따라다니는 배너 레이어

반응형
Posted by 은둔고수
반응형

jquery를 이용해서 스크롤을 지정한 위치까지 내리면 위로 버튼을 보여주고 클릭하면 화면 제일 상단으로 이동한다.

 

 

예> html

<!-- 버튼 : 위로 -->
<button type="button" class="btn_up_layer">위로</button>

 

 

예> css

/* 버튼 : 위로 */
.btn_up_layer {position:fixed;right:15px;bottom:20px;display:none;padding:5px 10px;z-index:1;}

 

 

예> javascript + jquery

/* 위로
스크롤이 특정 위치로 이동하면 위로버튼이 나타난다.
위로버튼을 클릭하면 상단으로 이동
*/
function btn_mv_up(oj) {
 if(!oj) return false;
 var o = $(oj);
 var p = $(window).scrollTop();
 if(p > 300){ o.fadeIn('slow'); }    // 위로버튼이 나타나는 위치 지정
 else if(p < 300){ o.fadeOut('slow'); }    // 위로버튼을 숨기는 위치 지정
}

 

// 위로 버튼
$(document).scroll(function() {
  btn_mv_up('.btn_up_layer');
 }).on('click', '.btn_up_layer', function() {
  $("html, body").animate({scrollTop:0}, 'slow');
});

 

 [스크롤이 상단에 있을 경우는 위로 버튼이 보이지 않는다.]

[스크롤을 지정 위치까지 내리면 위로 버튼이 나타난다.]



더보기>

- jquery scroll 따라다니는 위로 버튼

반응형
Posted by 은둔고수
반응형

jquery div, table 등의 태그를 동적 생성을 하게 되면 click 이벤트 등이 반응을 하지 않게 되는데

이런 경우 on을 이용해서 처리할 수 있다.

 

예> html

<div class="dom">
 <ul>
  <li>http://okkks.tistory.com/1065 [기본]</li>
 </ul>
 <button type="button" class="add">추가</button>
</div>

 

예> javascript + jquery

<script type="text/javascript">

$('.dom .add').click(function() {
 $('.dom ul').append('<li>http://okkks.tistory.com/1065 [추가]</li>');
});

 

/* 기존 방식 */

/*
$('.dom ul li').click(function() {
 alert($(this).text());
});
*/

 

/* 동적 방식 */

$(document).on('click', '.dom li', function() {
 alert($(this).text());
});

</script>

 

 

 [기존 방식으로 하는 경우 추가된 부분은 click 이벤트가 반응을 하지 않는다.]

 

 

[동적 방식으로 처리하는 경우 추가된 부분도 click 이벤트가 발생한다.]

반응형
Posted by 은둔고수
프로그램/php2015. 3. 10. 15:14
반응형

/* 날짜 형식 변환
$d : 날짜(0000-00-00 00:00:00)
$t : 변환형식( 1(기본):당일이면 00:00:00, 지난 날짜이면 00.00.00 )
반환 : 변환한 날짜
*/
function rtn_date_fm($d, $t=1) {
 if(!$d || strlen($d) != 19) return false;
 $rtn = false;

 switch ($t) {
  case 1:
   if(substr($d, 2, 8) == date("y-m-d")) {
    $rtn = substr($d, 11, 8);
   } else {
    $rtn = str_replace("-", ".", substr($d, 2, 8));
   }

   break;
  
  default:
   $rtn = false;
   break;
 }

 return $rtn;
}

 

 

사용법 예> 금일이면 "시분초(00:00:00)" 형식으로 변환

$date = date("Y-m-d H:i:s");    // 오늘 날짜(2015-03-10 15:03:42)

echo "<br />날짜 형식 변환 = " . rtn_date_fm($date); 

 

결과>

 

 

사용법 예> 지난 날짜이면 "년월일(00.00.00)" 형식으로 변환

$date = "2015-03-09 12:00:00";    // 어제 날짜

echo "<br />날짜 형식 변환 = " . rtn_date_fm($date); 

 

결과> 

반응형
Posted by 은둔고수
반응형

jquery를 이용해서 index 값 알아내기

 

<div class="checkbox">
 <label>
   <input type="checkbox"> 1. okkks.tistory.com
 </label>
 <label>
   <input type="checkbox"> 2. okkks.tistory.com
 </label>
 <label>
   <input type="checkbox"> 3. okkks.tistory.com
 </label>
</div>

<script type="text/javascript">
$('.checkbox input').click(function() {
 alert($('.checkbox input').index(this)); // index 값 알아내기
});
</script> 

 


 

더보기>

- jquery css 변경 - 선택한 메뉴를 활성화하고 나머지 메뉴는 비활성화하기

반응형
Posted by 은둔고수
반응형

jquery를 이용해서 메뉴 목록에서 선택한 메뉴(탭, 버튼)를 활성화 시키고 나머지는 비활성화 시키기

 

<style type="text/css">
ul {list-style-type:none;max-width:200px;}
.list {border:1px solid #cccccc;padding:5px;} /* 기본 css 및 선택하지 않은 경우 */
.list.on {border:1px solid #000000;} /* 선택한 경우 css */
</style>

<ul>
 <li class="list"><a href="javascript:;">1. okkks.tistory.com</a></li>
 <li class="list on"><a href="javascript:;">2. okkks.tistory.com</a></li>
 <li class="list"><a href="javascript:;">3. okkks.tistory.com</a></li>
 <li class="list"><a href="javascript:;">4. okkks.tistory.com</a></li>
 <li class="list"><a href="javascript:;">5. okkks.tistory.com</a></li> 
</ul>

<script type="text/javascript">
$('li').click(function() {
 $('li').removeClass('on');
 $(this).addClass('on');
});
</script>

 

 

 

 


더보기>

- jquery를 이용한 index 값 알아내기

반응형
Posted by 은둔고수
반응형

/* 특정 쿠기 삭제
ck_name : 쿠키 이름
*/
function del_cookie(ck_name) {
    set_cookie(ck_name, "", 0 , 0);
}

 

del_cookie('site_name');        // 쿠키 삭제


 

참고> javascript cookie 생성

반응형
Posted by 은둔고수
반응형

/* 쿠키 생성
초단위
ck_name : 쿠키 이름
ck_val : 쿠키 값
t_type : 시간 종류
t_val : 시간 값
*/
function set_cookie(ck_name, ck_val, t_type, t_val) {
    var expire = new Date();
    var ary_time_type = [1000, (1000*60), (1000*60*60), (1000*60*60*24)]; // 초, 분, 시, 일
    v = (ary_time_type[t_type] * t_val);
    expire.setTime(expire.getTime() + v);
    cookies = ck_name + '=' + escape(ck_val) + '; path=/ '; // 한글 깨짐 막기 : escape(cValue)

    if(typeof t_val != 'undefined') cookies += ';expires=' + expire.toGMTString() + ';';

    document.cookie = cookies;

}

 

 

set_cookie('site_name', 'okkks.tistory.com', 0, 10);    // 쿠키 생성(보유시간:10초)

 

 

참고> javascript cookie 삭제

반응형
Posted by 은둔고수