返回结果:
$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不喜欢上面第二段代码中的查询?
答案 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
如果没有 - 检查您的数据,数据库和拼写错误。