MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 への移行を検討しましょう。

  1. 【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; サンプルテーブルの作成 それでは、実際にテ

  2. 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