自从我搬到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 :(得分:0)
使用$stmt->debugDumpParams();
答案 1 :(得分: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();
答案 2 :(得分:0)
我错过了什么吗?您没有获取结果,$stmt
是PDOStatement对象,您需要获取实际结果集才能使用它:
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
将所有结果提取到关联数组中。