2013-08-24 4 views
0

이 나에게 나는 이런 식으로 뭔가가PHP 후 그 실행

를 PDO로 이동하기 때문에 많은 좌절 : 아무것도하지만 휴식 나던,

이제
$sql = "select * FROM $table where id=:id"; 
$this->stmt = $this->dbh->prepare($query); 
$this->stmt->bindValue($param, $value, $type); 
bindValue(:id => $this->user_id); 
$this->stmt->execute(); 

선택 실행을 나는 $ this- 에코 경우, 예상 결과를 얻을 그나마> 나는 이런 식으로 뭔가 얻을 STMT :

PDOStatement Object ([queryString] => UPDATE `users` 
SET user_active= :user_active, user_activation_hash= :user_activation_hash 
WHERE user_id = :user_id AND user_activation_hash = :verification_code) 

은 이제 그렇게 문제가 전달 된 값을 가능성이 높습니다 좋아 보이는을, 그래서 대신의 숫자를 통과 나는 따옴표를 엉망으로 만들었고 $ id를 문자열로 전달했지만 변수를 평가하지 못했지만 실제 진술 값이 무엇인지 알아낼 방법을 찾지 못했습니다. 더 쉬운 방법이 있어야합니다. 표준 mysql은 간단히 쿼리를 변수에 할당하고 그것을 반향하거나 mysql_error를 사용하거나 죽이면됩니다.

FWIW 나는 debugDumpParams을 시도하고는이 반환, 그 값 내가 디버깅 할 유사한 디버그 덤프 값이나 뭔가가없는 추측에

UPDATE `users` SET user_active= :user_active, user_activation_hash= :user_activation_hash WHERE user_id = :user_id AND user_activation_hash = :verification_code Params: 4 Key: Name: [12] :user_active paramno=-1 name=[12] ":user_active" is_param=1 param_type=2 Key: Name: [21] :user_activation_hash paramno=-1 name=[21] ":user_activation_hash" is_param=1 param_type=2 Key: Name: [8] :user_id paramno=-1 name=[8] ":user_id" is_param=1 param_type=2 Key: Name: [18] :verification_code paramno=-1 name=[18] ":verification_code" is_param=1 param_type=2 

+0

나는 당신이'where id = : id'를 의미한다고 생각합니까? – Mike

+0

정확하고 편집 됨 – user1547410

+0

글쎄, 예상되는 결과가 아니라면 무엇을해야합니까? –

답변

0

사용 $stmt->debugDumpParams();

+0

그것은 내가 그것을 사용할 때 정의되지 않은 method :: debugDumpParams()를 호출한다? – user1547410

+0

괜찮 았어.하지만 그것은 단지 $ stmt를 echo 할 수있는 매개 변수를 반환한다. 원래의 게시물을 보자. – user1547410

0

DBMS에서 실행되는 최종 쿼리를 인쇄하는 방법을 모르겠지만 코드에서 발견 한 문제를 지적 할 것입니다.

다음 문이 사용되지 않은 매개 변수가있는 자리는 :id 또는 ?를 즉 다음 문에서

bindValue(:id => $this->user_id); 

, 당신이있어 :

$sql = "select * FROM $table where id=$id"; 

그래서, 다음과 같은 성명 종류의 쓸모 $query 변수를 준비하지만 $query을 정의하지 않았습니다. $sql이어야합니다. 위의 설명을 바탕으로

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

, 코드 블록은 다음과 같아야합니다

$sql = "select * FROM $table where id=:id"; 
$this->stmt = $this->dbh->prepare($sql); 

// Don't know the use of the following line so I'm commenting it out. 
// $this->stmt->bindValue($param, $value, $type); 

$this->stmt->bindValue(:id => $this->user_id); 
$this->stmt->execute(); 
+0

아마도'$ id == ': id'' ...하지만 약간 중복 될 수있다. – Mike

+0

그래, 실제 코드 자체가 중요하지 않았고, 완전히 무작위로 던져 함께 정말 진술을 인쇄의 개념, 나는 삽입 및 업데이 트와 코드 작업을 가지고 있지만 그 때 문제가 작동하지 않습니다. 그래서 그 것들을 바로 잡는 데 시간을 낭비하기 때문에 나는 그것을 지적해야합니다 :) – user1547410

0

내가 뭔가를 놓치고 있습니까?

$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 

연관 배열로 모든 결과를 가져옵니다 : 당신은 결과를 가져 오는되지 $stmt는 PDOStatement 개체입니다, 당신은 당신과 함께 작업 할 수 있습니다 실제 결과는 설정 가져 오기해야합니다.

+0

.... 나는 정말로 여기에 뭔가 빠져 있습니까? –

+0

적어도 당신은 위로 upvote :) 오류가 있습니다. 나에게서가 아니라, 분명히하기 위해서. –

+0

@ YouCommonSense :: D 그렇습니다. 나는 바보인지 아니면 다른 모든 사람인지 확실하지 않습니다. –