2011-07-17 22 views
5

DUPLICATE KEY UPDATE ON ...よう INSERT INTOとしてtable、SQL文の実行中...にmysql_affected_rowsに頼る ()を決定します。 http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html上のMySQLサイトとして 、それは述べて:行が既存の行と、新しい行として2挿入されている場合、INSERTについてにmysql_affected_rows()戻り値-1

を... DUPLICATE KEY UPDATEステートメントで、影響を受けて、列の値が1であります更新されます。私たちは多くのクエリが今にmysql_affected_rowsを持っていたのMySQL 5.1.16、()マイナス1(-1)

http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html上のMySQLのサイト上で提案された解決策を呼び出すことですを返すにアップグレードするまで、すべてがOKに働いていた

selectクエリでmysql_query()関数を実行するたびに関数mysql_store_result()が呼び出されます。

しかし、PHPではこのような関数が定義されていないようです。

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

+0

準備文を使用していますか?ちなみに、PHPはstore_result関数を持っています - http://php.net/manual/en/mysqli.store-result.phpしかし、store_resultはINSERTの後ではなくSELECTの後に呼び出されます。 * -1は、クエリがエラーを返したこと、またはSELECTクエリでmysql_store_result()を呼び出す前にmysql_affected_rows()が呼び出されたことを示します* –

+0

この問題もあります。 –

答えて

2

mysql_affected_rowsは、最後のクエリが失敗した場合は-1を返します。私はあなたのクエリやデータベース接続をチェックします。 this linkを参照してください。

4

一般にmysql_affected_rows()が-1を返した場合、クエリが失敗したことを意味します(詳細はmanual pageを参照)。エラーの内容を確認するには、mysql_error()を呼び出しますが、影響を受けた行の数がわかるまでには、mysql_query()を呼び出したときにエラーを既に検出しているはずです。

PHPのMySQLモジュールがstore_result機能を持っていないかもしれませんが、新しいMySQLiモジュールが行います。

あなたがstore_result機能について尋ねているので、私はまた、あなたの質問の一部にお答えしましょう。 http://php.net/manual/en/mysqli.store-result.php

を参照してください。一般的には、とにかく同等mysqli_xxx機能にmysql_xxx機能を使用してから切り替えることをお勧めしますので、これはあなたがそうするための絶好の機会となります。

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