2014-09-26 5 views
0

준비된 쿼리를 사용하려고하는데이 코드는 작동하지 않습니다. 단지 prepare()를 처음 사용할 때만 붙어 있습니다. 주먹에 댓글을 달면 if()는 아무 것도하지 않고, 이제는 두 번째 것에 붙어 있습니다. 연결 문제 없음/오류 없음, 막힘.준비된 쿼리가 작동하지 않습니다 PHP

mysqli_query()를 사용하여이 모든 작업을 수행하면 모든 것이 훌륭하게 작동합니다. 내가이

function addUser($id){ 
    echo "1"; 
    if ($stmt = $this->mysqli->prepare("SELECT * FROM Users WHERE ID = ?")){ 
    echo "2"; 
    if (!($stmt->bind_param("s", $id))){ 
     return false; 
    } ... 

    }else{ 
    echo "3"; 
    } ... 

같은 코드를 변경하는 경우

function addUser($id){ 
/* 
    if ($stmt = $this->mysqli->prepare("SELECT * FROM Users WHERE ID = ?")){ 

    if (!($stmt->bind_param("s", $id))){ 
     return false; 
    } 

    if ($stmt->execute()) { 
     if ($stmt->num_rows!=0){ 
     return false; 
     } 

    }else{ 
     return false; 
    } 

    }else{ 
    return false; 
    }*/ 

    if ($stmt = $this->mysqli->prepare("INSERT INTO Users VALUES (?, '')")) { 

    if (!$stmt->bind_param("s", $id)) { 
     return false; 
    } 

    if (!$stmt->execute()) { 
     return false; 
    } 

    return true; 
    } 

    return false; 

} 

및 디버깅에 대한

, 난 단지 "1"페이지에서 볼 수 있습니다. 클래스의

시작 : 당신은 결코 execute() 그래서 아무것도 일어나지 않습니다

class db{ 
    private $mysqli; 

    function __construct($ip, $login, $password, $database){ 
     $this->mysqli = new mysqli($ip, $login, $password, $database) or die("Problem with DB connection!"); 
     $this->mysqli->set_charset("utf8"); 
    } 
+0

을, 당신이 비교하는 배와 함께 : 여기

내가 그것을 쓰는 것이 방법이다. 죄송합니다. 코드를 잘못 읽으 셨습니다. – RST

+0

오류를 실제로 검사하고 로그 아웃하시기 바랍니다. 현재 코드는 DB 상호 작용에서 전혀 오류 처리를하지 않습니다. –

+2

@RST이 경우에는 하나의'= '가 필요합니다. –

답변

0

따라서 오류가 인상되지 않습니다. 하나의`=`당신이 할당하는 값이

function addUser($id){ 
    if ($this->mysqli->connect_errno) { 
     die('Connect Error: ' . $this->mysqli->connect_errno); 
    } 
    if ($stmt = $this->mysqli->prepare("INSERT INTO Users VALUES (?, '')")) { 
     $stmt->bind_param("s", $id);//did you mean i for type int ? 
     $stmt->execute();//dont forget this!! 
    }else{ 
     die('Connect Error: ' . $this->mysqli->connect_errno); 
    } 

    return ($stmt->rowCount() > 0)? true : false; 

} 
+0

나중에 –

+0

함수에서 실행합니다.'$ stmt' 자체를 반환하지 않으면이 작업을 수행 할 수 없습니다. 그것은 무의미합니다 – meda

+0

@ user3830889 왜 거기서 그것을 실행하지 않습니까? 당신이 나중에 그것을 execcute하고 싶다면 그 객체를 반환하거나 당신이 연결 한 것처럼 속성을 사용하십시오 – meda

관련 문제