6

INSERT INTO ... ON DUPLICATE KEY UPDATE ... などの SQL ステートメントを実行するときtable、挿入または更新が実行されたかどうかを判断するために mysql_affected_rows() に依存しています。http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.htmlの mysql サイトとして、次のように述べています。

INSERT ... ON DUPLICATE KEY UPDATE ステートメントの場合、影響を受ける行の値は、行が新しい行として挿入される場合は 1、既存の行が更新される場合は 2 です。

多くのクエリで mysql_affected_rows() が MINUS ONE (-1) を返すようになった MySQL 5.1.16 にアップグレードするまで、すべて正常に機能していました。

http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.htmlの MySQL サイトで提案されている解決策は、関数 mysql_query() を実行するたびに関数 mysql_store_result() を呼び出すことです。選択クエリで。

ただし、PHP にはそのような関数が定義されていないようです。

PHP と MySQL 5.1.16 を使用して mysql_affected_rows() を正しく動作させるにはどうすればよいですか?

4

2 に答える 2

4

一般に、mysql_affected_rows()-1 を返す場合は、クエリが失敗したことを意味します (詳細については、マニュアル ページを参照してください)。を呼び出すことでエラーの内容を確認できますが、影響を受けた行数を確認する前に、呼び出した時点でmysql_error()すでにエラーを検出しているはずです。mysql_query()

関数について質問しているのでstore_result、質問のその部分にも答えさせてください。

PHP のMySQLモジュールには機能がない場合がありstore_resultますが、新しいMySQLiモジュールには機能があります。http://php.net/manual/en/mysqli.store-result.phpを参照してください。

mysql_xxxいずれにせよ、関数の使用から同等の関数に切り替えることが一般的に推奨されるmysqli_xxxため、これはそうする絶好の機会です。

MySQLi モジュールは PHP 5.0 で導入されたため、PHP のバージョンをアップグレードする必要はありません。ただし、それでもアップグレードを検討することをお勧めします。PHP 5.1 を使用している場合は、すでに 5 年以上サポートされていないバージョンを使用しています。

于 2011-07-17T09:00:13.043 に答える
2

mysql_affected_rows最後のクエリが失敗した場合は -1 を返します。クエリやデータベース接続を確認します。このリンクを参照してください。

于 2011-07-17T08:58:52.903 に答える