0

サーバー構成の変更後。MYSQL と PHP を更新しました。次のようなさまざまな SQL エラーが発生します。

SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。1 行目の 'WHERE id = '759'' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

SQLSTATE [HY000]: 一般エラー: 2014 他のバッファーされていないクエリがアクティブな間は、クエリを実行できません。PDOStatement::fetchAll() の使用を検討してください。または、コードが mysql に対してのみ実行される場合は、PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性を設定して、クエリのバッファリングを有効にすることができます。

を追加$this->dbo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);しました。これにより、コード エラーが発生します。

コードを何も変更していないので、シンタックス エラーになることはありませんか?

更新: 関数 loadAssoc($values = false) {

            // Execute statement
            ($values) ? $this->statement->execute($values) : $this->statement->execute();

            // Return associative array
            return $this->statement->fetch(PDO::FETCH_ASSOC);
        }

エラー PHP Fatal error: Call to a member function execute() 行で execute を使用します。

私のcpanelには次のように書かれています:linux、php 5.3.21、mysql 5.5.28(これにアップグレードしたばかり)は問題を解決すると考えました

そして、前に述べたように、サーバーの更新前にすべてが機能していました:S

4

1 に答える 1

1

PHPドキュメントから:

PDOStatementでこの属性がTRUEに設定されている場合、MySQLドライバーはバッファリングされたバージョンのMySQLAPIを使用します。ポータブルコードを作成している場合は、代わりにPDOStatement :: fetchAll()を使用する必要があります。

何らかの理由で、更新されたPDO拡張機能がバッファリングされたクエリをサポートしないmysqlapiに対してリンクされているようです。

既存のコードはバッファリングされたクエリを使用しているため、失敗します。コード自体を変更しない唯一の解決策は次のとおりです。

  • バッファリングされたクエリをサポートするmysqlクライアントライブラリをインストールします
  • このライブラリに対してPDOをリンクする

さらに役立つように、使用しているOSとMySQL、PDO、PHPのバージョンに関する追加情報が必要です...

于 2013-02-21T21:19:49.743 に答える