2011-11-11 2 views
1

나는 아직 PDO를 배우지 못해서 놓친 것이있을 수 있지만 기본적으로 테이블에 행을 삽입하고 생성 된 ID를 선택하려고합니다.PDO 다중 쿼리 "SQLSTATE [HY000] : 일반 오류"

한 pdo 문에서 두 쿼리를 모두 좋아하는지 확실하지 않습니다. 다음은 SQL을 실행하기 위해 사용하는 코드입니다.

이 함수는 데이터베이스 클래스의 일부이며, $ this -> _ handle은 PDO 객체입니다.

public function Connect() 
    { 
     try { 
      $this->_handle = new \PDO('mysql:host='.$this->_host.';dbname='.$this->_database, $this->_username, $this->_password); 
      $this->_handle->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
     } 
     catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 

내가 실행하고있어 SQL은 이것이다 :

INSERT INTO `users` (`Username`, `Password`, `PasswordSalt`, `Email`, `IsAdmin`, `LoginAttempts`, `LastLogin`, `LastLoginAttempt`, `Created`) VALUES (:username, :password, :passwordsalt, :email, :isadmin, :loginattempts, :lastlogin, :lastloginattempt, :created); SELECT LAST_INSERT_ID() as 'id' 

사용자 생성 및 사용자 테이블에 존재하지만 그 이후로 그 오류된다.

누구나 잘못된 것을 볼 수 있습니까? :)

건배!

답변

1

내가 PDO에 대한 MySQL의 드라이버 (? 어쩌면 자체에는 mysql) 멀티 쿼리를 지원하지 않습니다 제표를 작성 확신합니다.

대신 쿼리에 SELECT LAST_INSERT_ID(), 후 Conexion::$cn->lastInsertId()를 사용하여 내가 PDO 드라이버가 지원 여러 쿼리 나던하는 아래는 mysql_query를 사용했기 때문에 그것이 생각 $query->execute()

+0

, 내가 mysqli의 multi_query과를 사용하여 다시 사라 이후했습니다 잘 작동 :) PDO 또는 PDOStatement에서 setAttribute (PDO :: ATTR_EMULATE_PREPARES, true)해야하는 여러 쿼리를 사용하려면 pdo_mysql을 사용하여 –

+0

을 사용하십시오. 또한 pdo는 밑에있는 mysql_query를 사용하지 않는다 ... mysql_ * extension을 대체하는 방법이다. –

0

나는이 올바른 생각 :

function ExecuteQuery($sql, $params = array()) 
{ 
    if(Conexion::$cn== null) 
     Conexion::Connect(); 
    $paramString=""; 

    foreach($params as $k=>$v) 
    { 
     $param = " :".$k." ,"; 
     $paramString .= $param; 
    } 
    $sql.=substr($paramString,0,-2); 
    $query = Conexion::$cn->prepare($sql); 
    foreach($params as $key => $value) 
    { 
     echo "entro"; 
     $query->bindParam(":".$key, $value); 
    } 

    $query->execute(); 
    $x = $query->fetchAll(\PDO::FETCH_ASSOC); 
    var_dump($x); 
    return $x; 
} 

public function Connect() 
{ 
    try { 
     $dns='dblib:host='.Conexion::$server.";dbname=".Conexion::$db.";"; 
     Conexion::$cn = new \PDO($dns, Conexion::$user, Conexion::$passw); 
     Conexion::$cn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
} 
관련 문제