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.'_');

それでも、以下のSQLクエリをWebMinで実行すると(「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番目のコードのクエリを嫌うのですか?

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.'_');

不思議なことに、どちらのSQLクエリもWebmin内から実行すると結果を返しますが、PHPPDOはWHERE句の一部として「ANDd.desc_type=1」を使用することを好み、LEFTJOINON句でそれを必要としているようです。 。

于 2013-02-18T21:31:15.347 に答える
-1

PDOが上記の2番目のコードのクエリを嫌うのはなぜですか?

PDOに質問する:

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

PDOがエラーをスローしない場合、PDOはクエリを「いいね」し、問題とは何の関係もありません。データ、データベース、タイプミスを確認してください。

最後のチェックとして、bindvalueの部分を省略します

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

データを取り消す場合(そうでない場合はPDOのせい
)、データ、データベース、タイプミスを確認してください。

于 2013-02-18T11:27:17.297 に答える