2017-05-19 1 views
0

이전 페이지의 i 버튼에서 가져온 ID를 기반으로 데이터베이스에서 데이터를 가져 오는 동안 오류가 발생합니다. 내가 ID를 에코 때 만 나에게 올바른 ID를 제공하지만 전체 쿼리에 나에게 오류를 제공합니다데이터베이스에서 정보를 가져 오는 동안 'SQLSTATE [HY093] : 메시지가있는'PDOException '예외가 발생했습니다.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound' in

나는이에 대한 몇 가지 SO 답을 찾았지만 그들 중 누구도 내가 가진 문제를 해결하지 않습니다.

<?php 
$fetch_article_info = $db->query("select * from news_article where id = :id"); 
    $fetch_article_info->execute(array(':id' => $_GET['id'])); 
$list = $fetch_article_info->fetchAll(PDO::FETCH_ASSOC); 
?> 

여기에 당신이 당신의 실행 함수에 전달되지 않습니다

class Database{ 

private $host = DB_HOST; 
private $user = DB_USER; 
private $pass = DB_PASS; 
private $dbname = DB_NAME; 
// database handler 
private $dbh; 
private $error; 

private $stmt; 


public function __construct(){ 
    // Set DSN 
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; 
    // Set options 
    $options = array(
     PDO::ATTR_PERSISTENT => true, 
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
    ); 
    // Create a new PDO instanace 
    try { 
     $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
    } 
    // Catch any errors 
    catch (PDOException $e) { 
     $this->error = $e->getMessage(); 
    } 
} 
    public function bind($param, $value, $type = null){ 
    if (is_null($type)) { 
    switch (true) { 
     case is_int($value): 
     $type = PDO::PARAM_INT; 
     break; 
     case is_bool($value): 
     $type = PDO::PARAM_BOOL; 
     break; 
     case is_null($value): 
     $type = PDO::PARAM_NULL; 
     break; 
     default: 
     $type = PDO::PARAM_STR; 
    } 
    } 
    $this->stmt->bindValue($param, $value, $type); 
} 
public function query($query){ 
     $this->stmt = $this->dbh->prepare($query); 
    } 

    public function execute(){ 
     return $this->stmt->execute(); 
    } 

    public function resultset(){ 
     $this->execute(); 
     return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 
    } 

    public function single(){ 
     $this->execute(); 
     return $this->stmt->fetch(PDO::FETCH_ASSOC); 
    } 
+0

'query'를'prepare' 호출로 변경하면, 플레이스 홀더로 문장을 준비한 다음 매개 변수로 실행합니다. '$ fetch_article_info = $ db-> prepare ("select * from news_article where id = : id");' – Fracsi

+0

@Fracsi 경고를 보내 주셔서 감사합니다. 경고 : PDO :: prepare() : SQLSTATE [00000] : No 오류 : 준비를 사용할 때 PDO 생성자가 호출되지 않았습니다. – marijn

+0

오류가 문제를 나타내며 매개 변수가 올바르게 바인딩되지 않았습니다. – Option

답변

1

유용한 것 같아요 db.class에서 내 공개 funtions의 일부입니다. 아래를 참조하십시오.

$db->execute(array(':id' => $_GET['id'])); 
$list = $db->resultset(PDO::FETCH_ASSOC); 

print_r($list); 

// db.php file 
public function execute($params){ 
    return $this->stmt->execute($params); 
} 

public function resultset(){ 
    // $this->execute(); 
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 
} 
+0

그는 쿼리를 실행 중이므로 실행할 필요가 없습니다. – Option

+0

내 로컬에서 테스트되었습니다. 그의 코드를 변경 한 후 저를 위해 일합니다. – devofash

관련 문제