4

PDO を使用して実行している小さなアプリがあり、サーバーの移行と PHP のアップグレードの後、次のエラーが発生します。

Warning: PDO::query(): SQLSTATE[HY000]: General error: mode must be an integer in var/www/xxxxxxxx

それが参照する行は

$statement = $this->_connection->Query("SELECT * FROM table WHERE SOMECOL = '$col' LIMIT 1", $this->_connection);

私はしばらくグーグルを見回してきましたが、修正はないようです。を使用してデフォルトの fetchmode を設定しようとしまし$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);たが、エラーは変わりません。

彼らが助けてくれてありがとう:)

4

2 に答える 2

7

$this->_connectionパラメーターとしての送信が間違っており、PDO クエリで予期されていません

PDOStatement PDO::query ( string $statement )

PDOStatement PDO::query ( string $statement , int $PDO::FETCH_COLUMN , int $colno )

PDOStatement PDO::query (文字列 $statement 、int $PDO::FETCH_CLASS 、文字列 $classname 、配列 $ctorargs )

PDOStatement PDO::query ( string $statement , int $PDO::FETCH_INTO , object $object )

その 2 番目のパラメーターが存在する場合は、int

出典: PHP マニュアル

于 2013-04-24T08:50:34.497 に答える
0

コードで混乱しているのは、クエリを実行するときに非標準の名前を使用していることです。

$this->_connection->Query

私は次のように書きます:

$this->dbh->query

PDO::query()->query は実際にはラッパークラスのカスタム関数ではなく、すぐにそう思うでしょう。

したがって、この場合、 の 2 番目のパラメーターはPDO::query()フェッチ モードである必要があり、接続自体 (PDO整数ではなく 型) を追加することは完全に冗長ですが、mysql で使用されるコーディング パターンの影響を受けたことは理解しています。および mysqli 拡張ドライバーは、現在は古い/廃止されていると見なされています。

于 2013-04-24T08:59:21.883 に答える