質問: ### 実現したいこと MySQLのUPDATEクエリで、元の値と同じでも、変更行数としてカウントしたいです。 ### 発生している問題 テーブル:hoge |id|foo | |1 |100 | このようなテーブルがあるとします。 そこに下記PHPコードを実行すると、0が出力されてしまいます ``` $mysqli->query("UPDATE hoge SET foo=100 WHERE id=1"); echo $mysqli->affected_rows; ``` fooの値が、変わっていなかったからだと思いますが、もしこのように、UPDATE前後で値が変わらない場合でも、変更行数としてカウントしたいです。 ### 試したこと WHEREと条件が合うカラムを取得すればいいだけですので、 SELECT * FROM hoge WHERE id=1 の結果行数を取得すればいいのですが、出来るだけクエリの回数は減らしたいので、変更行数として取得したいです。
回答: すでに解決済みではありますが、、 SQL実行後、`$mysqli->info`プロパティに以下のような文字列が格納されます。 ``` Rows matched: 1 Changed: 0 Warnings: 0 ``` このうち`Rows matched: [数字]`部分が条件に合致したレコードの行数になりますので、 以下のような関数を作ってやると、`[数字]`部分だけをうまく取り出すことができます。 ``` function matched_rows(mysqli $mysqli) { $info = $mysqli->info; if (is_null($info)) { // SQL実行前またはエラー発生 return -1; } $exploded = explode(' ', $info); return (int) $exploded[2]; } ```