MySQLクエリによって影響を受けた行数を取得するPHPスクリプトの書き方
PHPでは、mysql_affected_rows() 関数を使うことで、直前に実行したMySQLクエリによって変更(影響)された行数を取得できます。INSERT、UPDATE、DELETEなどのデータ操作系クエリを実行した際に、「実際に何行が処理されたのか」を確認したい場合に非常に便利な関数です。
mysql_affected_rows() の基本的な使い方
以下は、MySQLサーバーに接続し、クエリによって影響を受けた行数を出力するシンプルな例です。
サンプルコード
<html>
<head>
<title>クエリによって影響を受けた行数</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
mysql_select_db( 'TUTORIALS' );
$result_id = mysql_query ($query, $conn_id);
# クエリが失敗した場合は0行として報告する
$count = ($result_id ? mysql_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");
?>
</body>
</html>コードのポイント
- mysql_connect() でサーバーに接続し、失敗した場合は die() で処理を中断します。
- mysql_select_db() で操作対象のデータベースを選択します。
- 三項演算子により、クエリが失敗した場合は 0 を返すようにしています。
- クエリが成功していれば、mysql_affected_rows() が実際に影響を受けた行数を返します。
注意:mysql_* 系関数は現在では使用不可
上記の mysql_connect() や mysql_affected_rows() といった関数群は、PHP 5.5.0 で非推奨となり、PHP 7.0 以降では完全に削除されています。そのため、現代の環境では mysqli 拡張モジュールまたは PDO を使用する必要があります。
mysqli を使った書き方(推奨)
<?php
$conn = mysqli_connect('localhost', 'root', 'rootpassword', 'TUTORIALS');
if (!$conn) {
die('接続できませんでした: ' . mysqli_connect_error());
}
mysqli_query($conn, "UPDATE users SET active = 1");
$count = mysqli_affected_rows($conn);
print("{$count} 行が影響を受けました");
?>PDO を使った書き方
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=TUTORIALS;charset=utf8mb4', 'root', 'rootpassword');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("UPDATE users SET active = :active");
$stmt->execute(['active' => 1]);
$count = $stmt->rowCount();
print("{$count} 行が影響を受けました");
} catch (PDOException $e) {
die('接続エラー: ' . $e->getMessage());
}
?>まとめ
クエリによって影響を受けた行数の取得は、古いコードでは mysql_affected_rows()、現行のPHPでは mysqli_affected_rows() または PDO の rowCount() を使います。UPDATE文の場合、値が変わらない行はカウントされない点にも注意してください。レガシーコードを保守する際は、必ず mysqli や PDO への移行を検討しましょう。
-
【MySQL】ブール値(BOOLEAN)をUPDATE文で更新する方法を実例付きで解説
MySQLでは、UPDATEコマンドを使ってブール値を簡単に更新できます。BOOLEANデータ型を定義しても、MySQLは内部的にtinyint(1)へ変換して扱う点に注意が必要です。また、trueやfalseといったリテラルも使用でき、trueは「1」、falseは「0」としてtinyint(1)に格納されます。 ブール値を更新する基本構文 ブール値の更新には、通常のUPDATE文と同じ構文を使用します。 UPDATE yourTableName SET yourColumnName = yourValue WHERE yourCondition; サンプルテーブルの作成 それでは、実際にテ
-
MySQLで日付ごとの合計値を集計する方法【GROUP BY活用術】
MySQLでは、datetime型の日付データを日ごとにグループ化し、数値の合計を求めることができます。本記事では、サンプルテーブルを作成し、DATE()関数とGROUP BY句、SUM()関数を組み合わせて日付ごとの合計を集計する手順を解説します。1. サンプルテーブルの作成まず、datetime型のカラムと、日数(カウント)を格納するint型のカラムを持つテーブルを作成します。mysql> create table DemoTable ( ShippingDate datetime, CountOfDate int ); Query OK, 0 rows affect