메뉴 건너뛰기

Dev tips

PHP PHP 에서 MySQL 바인딩 구현

taknim 2009.09.12 03:27 조회 수 : 9131 추천:2192

누군가가 말해준 MySQL 바인딩

/* 바인드 */
protected function bind($key) {
  $key  = substr($key[0],1);
  
  if(array_key_exists($key,$this->tmpBind)) {
   $bind = addslashes($this->tmpBind[$key]);
  } else {
   $tmp = explode(':',$this->tmpQuery);
  
   foreach($tmp as $i => $buf) {
    if(substr($tmp[$i+1],0,strlen($key)) == $key) {
     $bind = addslashes($this->tmpBind[$i]);
    }
   }
  }
  return sprintf("'%s'", $bind);
}

/* 쿼리 실행 */
public function query($sql,$bind='') {
  if(!is_resource($this->conn)) $this->conn();
  
  if(isset($bind)) {
   $this->tmpQuery = $sql;
   $this->tmpBind = $input;
  
   $sql  = preg_replace_callback('/:[a-zA-Z_]+[a-zA-Z0-9_]*/',array($this,'bind'),$sql);
  
   unset($this->tmpQuery);
   unset($this->tmpBind);
  }

  $this->stmt = mysql_query($sql,$this->conn);

  return $this->stmt;
}

/* 실행 예제 */
$sql = " select * from table where id=:a1 ";
// array('a1'=>'taknim') or array('taknim');
$sql  = preg_replace_callback('/:[a-zA-Z_]+[a-zA-Z0-9_]*/',array($this,'bind'),$sql);