2013-08-24 55 views
0

這讓我很沮喪了很多,因爲我搬到PDOPHP呼應查詢的實際語句後的執行

我有這樣的事情:

$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(); 

現在選擇運行,那並不破壞任何東西,但我沒有得到預期的結果,如果我回聲$這個 - > 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

它說調用未定義的方法Database :: debugDumpParams()時,我使用它? – user1547410

+0

確定它工作,但它只返回參數,我可以得到迴應$ stmt已經,看原來的帖子 – user1547410

0

我不確定如何打印在DBMS中執行的最終查詢,但我會指出我在代碼中注意到的問題。

下面的語句是不使用任何參數佔位符,即:id?

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

所以,下面的語句是一種無用的:

bindValue(:id => $this->user_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

我缺少的東西?您還沒有獲取的結果,$stmt是一個PDOStatement對象的對象,你需要獲取實際的結果集,然後才能使用它:

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

將獲取所有結果到一個數組。

+0

....我真的在這裏錯過了什麼嗎? –

+0

至少你有一個安慰upvote :)錯誤。不是來自我,要說清楚。 –

+0

@YourCommonSense:D那是真的。我不確定我是白癡還是其他人。 –