2014-12-12 2 views
1

나는 약간의 튜토리얼을 따라 왔고 이것이 왜 작동하지 않는지 이해할 수 없다.PDO 삽입 값

나는 사용자 클래스가 있습니다. __construct 메서드에서 DB 연결을 얻습니다. 다음으로 나는 Create 메소드를 가지고 있는데, 이는 테이블에 데이터를 삽입하여 사용자를 생성해야하지만 실행되지는 않습니다. bindParam 함수 나 MySQL 삽입 코드에 문제가 있다고 생각합니다. 나는 다음과 같은 한 오류 : 당신을 감사하는 방법을 알고있는 경우

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\www\samodel\object\users.php on line 44 

이 문제를 해결하기 위해 도와주세요 :

<?php 
//Was Products, now Users 
class Users{ 

    // database connection and table name 
    private $conn; 
    private $table_name = "users"; 

    // object properties 
    public $id; 
    public $username; 
    public $first_name; 
    public $last_name; 
    public $email; 
    public $password; 

    public function __construct($db){ 
    $this->conn = $db; 
    } 

    // create user 
    function create(){ 
    //write query 
    $query = "INSERT INTO 
      " . $this->table_name . " 
       SET 
        username = ?, first_name = ?, last_name = ?"; 

    $stmt = $this->conn->prepare($query); 

    $stmt->bindParam("username", $this->username); 
    $stmt->bindParam("first_name", $this->first_name); 
    $stmt->bindParam("last_name", $this->last_name); 

    if($stmt->execute()){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 
} 
?> 
+0

을 시도 나쁜 SQL을 생각? – Mureinik

+0

경고 : PDOStatement :: execute() : SQLSTATE [HY093] : 잘못된 매개 변수 번호 : 매개 변수가 C : \ www \ samodel \ object \ users.php의 44 행에 정의되어 있지 않습니다. – Nevada

+0

$ stmt-> execute() 줄 – Nevada

답변

3

당신은 여기에 두 가지 기술을 혼합하는 - 당신은 위치 자리에 문을 준비하고있다 , 그러나 이름에 따라 바인딩 - 당신은 하나를 고집하고 그것에 충실해야합니다. 위치 지정자로

:

$query = "INSERT INTO 
      " . $this->table_name . " 
     SET 
      username = ?, first_name = ?, last_name = ?"; 

$stmt = $this->conn->prepare($query); 
$stmt->bindParam(1, $this->username); 
$stmt->bindParam(2, $this->first_name); 
$stmt->bindParam(3, $this->last_name); 

라는 이름의 자리 표시 자와 :

$query = "INSERT INTO 
      " . $this->table_name . " 
     SET 
      username = :username, first_name = :first_name, last_name = :last_name"; 

$stmt->bindParam("username", $this->username); 
$stmt->bindParam("first_name", $this->first_name); 
$stmt->bindParam("last_name", $this->last_name); 
+0

아니, 작동하지 않습니다,보기 파일에서 내 create 메소드를 실행하면 작동하지 않습니다. ($ user-> create()) { echo "ok";} else {echo "not work ";} – Nevada

+0

어쩌면 SQL 작업 방법을 확인하는 함수가 있습니까? – Nevada

0

난 당신이지고 어떤 오류

$query = "INSERT INTO {$this->table_name} (username, first_name, last_name) VALUES (:username, :first_name, :last_name)";