クマのブログ

つまづいたところ、学びを書いていきます

mysqli_num_rowsの使い方

前提

背景

  • 会社の研修中、PHPの基礎講座を受講

  • 今の会社に就職前に独学でPHPを学習していたが、初めて知ったことがあったので、アウトプット

事象(やりたいこと)

mysqli_num_rowsで出たエラーを解消したい

  /* DB接続済  */
 // SQL文の設定
 $sql_select="INSERT INTO bookinfo VALUES('{$isbn}', '{$title}', {$price})";

 //クエリの実行
 $result_select = executeQuery($sql_select); 

 // 取得したクエリデータ数のカウント
  $rows = mysqli_num_rows($result_select);

  ~~~

  if($rows > 0){
 
  // 異常系。SQL実行結果がDB内のデータと重複した場合の処理

  }else{

  // 正常系。SQL実行結果がDB内のデータと重複せずユニークである場合の処理

  }

困ったこと

以下エラーが発生

Warning: mysqli_num_rows() expects parameter 1 to ~...

試したこと

1. INSERT処理と重複チェック処理を分けて考えた

  • 上記ソースコードは「全ての既存データをチェックする処理」と「INSERTする処理」をごっちゃにしていたため、起きた事象です。

  • ソースコード上の原因は$sqlがINSERTであるにも関わらず、mysqli_num_rows関数を使って処理しようとしたところでエラーが発生していました。

  • 最終的に冒頭述べた通り、以下2つの関数を作り挙動を確認

    • SELECT文によるチェック機能を持つ関数

    • INSERTするだけの関数

結果

エラーが発生せず、正常に動くようになった

所感

  • 初めて見たエラーでしたが、落ちついて処理を追っていけば対処できるエラーだと認識

  • mysqli_num_rowsは引数の行数をintで返すので、今回の場合、感覚的に挿入する1行分を読み取り「1」が返ってきそうなものですが、実際は何も返ってこなかった

感覚的な挙動を試し、実際の挙動を見て答え合わせできた経験は貴重だったし、印象に残った。