SQL查询无法在php pdo中运行

时间:2013-02-18 11:23:59

标签: php mysql sql pdo

返回结果:

$query = $dbh->prepare('SELECT * FROM groups WHERE id LIKE :id ORDER BY id');
$query->bindValue(':id', $this->id.'_');

这不是:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE :id AND d.desc_type=1 ORDER BY g.id');
$query->bindValue(':id', $this->id.'_');

然而,如果我在WebMin中运行下面的SQL查询(“0002_”是上面绑定的值),那么我会得到结果。

SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE "0002_" AND d.desc_type=1 ORDER BY g.id

那么为什么PDO不喜欢上面第二段代码中的查询?

2 个答案:

答案 0 :(得分:1)

好的,我钉了它:

正如我在最初的问题中所说,以下代码不会返回结果:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id WHERE g.id LIKE :id AND d.desc_type=1 ORDER BY g.id');
$query->bindValue(':id', $this->id.'_');

此代码返回预期结果:

$query = $dbh->prepare('SELECT g.*, d.desc_text FROM groups g LEFT JOIN descriptions d ON d.desc_id=g.id AND d.desc_type=1 WHERE g.id LIKE :id ORDER BY g.id');
$query->bindValue(':id', $this->id.'_');

奇怪的是,从Webmin内部运行时,SQL查询都会返回结果,但似乎PHP PDO不喜欢将“AND d.desc_type = 1”作为WHERE子句的一部分,并且需要在LEFT中使用它加入条款。

答案 1 :(得分:-1)

  

为什么PDO不喜欢上面第二段代码中的查询?

询问PDO:

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

如果PDO没有抛出任何错误 - 它“喜欢”您的查询,与问题无关。检查您的数据,数据库和拼写错误。

最后检查省略绑定值部分

$stmt = $dbh->prepare('put your query from WEBMIN here');
$stmt->execute();
$res  = $stmt->fetch();
var_dump($res);

如果它重新计算任何数据 - 责备PDO
如果没有 - 检查您的数据,数据库和拼写错误。