0

这将返回结果:

$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 不喜欢我上面第二段代码中的查询呢?

4

2 回答 2

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 JOIN ON 子句中使用它.

于 2013-02-18T21:31:15.347 回答
-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
- 检查您的数据、数据库和拼写错误。

于 2013-02-18T11:27:17.297 回答