2013-06-12 5 views
0

다음 코드는 화면에 "12"를 표시합니다. 그게 전부입니다. 이러한 에코 번호는 디버깅을 위해 추가되었습니다.PHP 문 준비 실패

"123"을 표시하고 MySQL 데이터베이스에 문에 변수를 삽입해야합니다. 웬일인지 prepare 문으로 끝납니다. fail() 오류 검사가 호출되지 않습니다. 사실 준비문 다음에 아무 것도 호출되지 않습니다.

나는 사이트 전체에 걸쳐 있으며 제대로 작동해야한다고 생각하지만 제대로 작동하지 않을 수 있습니다.

아무도 왜 이런 식으로 준비 문이 실패하는지 말할 수 있습니까?

$query = "insert into member(mail, user, val) values (?, ?, ?)"; 
$uuu = [email protected]; 
$hhh = Blah Williams; 
$val = 0; 
echo "1"; 
if($stmt = $this->conn) 
{ 
    echo "2"; 
    $stmt->prepare($query) || $this->fail('MySQL prepare', $stmt->error); 
    echo "3"; 
    $stmt->bind_param('ssi', $uuu, $hhh, $val) 
     || $this->fail('MySQL bind_param', $stmt->error); 
    $stmt->execute(); 
    if (!$stmt->execute()) 
    { 
     if ($stmt->errno === 1062 /* ER_DUP_ENTRY */) 
     { 
      $this->fail('This username is already taken'); 
     } 
     else 
     { 
      $this->fail('MySQL execute', $stmt->error); 
     } 
    } 
} 
else 
{/*error check*/ 
    $this->fail('MySQL insert prepare failed', $stmt->error); 
    return 0; 
} 
$stmt->close(); 
return true; 
+0

는 항상 치명적인 오류를 포함하여 모든 레벨의 오류를보고 사용할 수 php.ini의 설정을 가지고 있는지 확인하십시오 :

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

는 실패 왜 사용을 확인하십시오. 그것은 많은 시간을 절약 할 수 있습니다. 디버그 확장처럼 xdebug를 사용하십시오. – varuog

+0

아쉽게도이 서버의 php.ini 파일에 액세스 할 수 없습니다. – Brru

+0

타사 서버가 아닌 로컬에서 개발 및 테스트 할 수 있도록 wamp/lamp/mamp를 설정하는 것이 편리합니다. http://php.net/ini_set을 사용하면 런타임에 php.ini 설정 중 일부를 무시할 수 있습니다. – varuog

답변

1

귀하의 과제물은 항상 사실로 사용되어야합니다.

var_dump($stmt->errorInfo()); 
+0

if ($ stmt = $ this-> conn-> prepare ($ query)) – Brru

+0

할 수 있습니다. – Martin

+0

아니요 - 너는 네가 가질 수있어. $ this-> fail (..). 원한다면. 두 메서드 모두 true를 반환하는지 확인합니다. 어떤 디버깅을 처리하기 위해 사용하고 싶은 논리에 따라 달라집니다. – Martin