2013-08-24 97 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那是真的。我不确定我是白痴还是其他人。 –