前提
背景
事象(やりたいこと)
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」が返ってきそうなものですが、実際は何も返ってこなかった
感覚的な挙動を試し、実際の挙動を見て答え合わせできた経験は貴重だったし、印象に残った。