C言語+MySQL入門 PartⅡ

C言語からMySQLを操作しよう

つなぐだけから、データを自在に動かすCプログラムへ。

PartⅡでは、MySQLへ接続できるようになったCプログラムから、実際にSQLを実行してデータを操作していきます。商品の登録・変更・削除、SELECTによる一覧取得、取得結果の読み取りなど、データベースアプリに欠かせない処理を一つずつ作ります。さらに、利用者が入力した値を安全にSQLへ渡すプリペアドステートメントや、在庫更新と履歴登録をまとめて処理するトランザクションにも挑戦します。単にAPIの関数を覚えるだけではなく、「なぜこの処理が必要なのか」まで理解しながら進める構成です。PartⅡを終えるころには、コンソール版やGUI版から再利用できる、本格的なDB操作関数を作れるようになります。

第5章 C言語からSQLを実行しよう

MySQLへ接続できたら、次はCプログラムからSQLを送ってみましょう。この章ではmysql_query()を使い、商品の登録、変更、削除を行います。さらにmysql_affected_rows()で更新された行数を確認し、「SQLは成功したけれど対象の商品がなかった」といったケースも判断できるようにします。最初は分かりやすい固定SQLから始め、SQL実行やエラー表示を関数として整理しながら、後の入力処理へつながる基礎を作ります。

01 C言語からSQLを送る流れ02 mysql_query()を使う
03 INSERTで商品を登録する04 UPDATEで商品を変更する
05 DELETEで商品を削除する06 mysql_affected_rows()を使う
07 SQLエラーを表示する08 SQL実行を関数に分ける
09 入力値を扱う前に確認する

第6章 SELECTの結果をC言語で受け取ろう

この章では、MySQLから返ってきたSELECTの結果をCプログラムで受け取ります。MYSQL_RESやMYSQL_ROWの役割を確認し、mysql_store_result()とmysql_fetch_row()を使って商品情報を1行ずつ読み取ります。件数の取得、複数列の表示、NULLの扱い、数値への変換など、一覧表示に必要な処理も学びます。最後には接続からSELECT、一覧表示、結果の解放までをまとめ、MySQLの商品をコンソールへ表示するプログラムを完成させます。

01 SELECTの結果が届くまで02 mysql_store_result()を使う
MYSQL_RESを理解するmysql_num_rows()を使う
mysql_fetch_row()を使うMYSQL_ROWを理解する
複数列を表示するNULLを扱う
数値を扱うmysql_free_result()を使う
商品一覧プログラムを完成させる

第7章 プリペアドステートメントを使おう

利用者が入力した商品名や単価を、そのままSQL文字列へ連結する方法には問題があります。この章では、その理由を確認したうえで、プリペアドステートメントを使った安全なSQL実行を学びます。MYSQL_STMTやMYSQL_BINDを使い、SQLの形と実際に渡す値を分けて扱います。入力値を渡す方法だけでなく、SELECTの結果を受け取る方法も扱います。最後には、これまでの商品登録処理をプリペアドステートメントを使った実装へ変更します。

第8章 トランザクションを学ぼう

在庫を変更するときは、在庫数だけ更新できればよいわけではありません。在庫数の変更と履歴の登録を、どちらも成功したときだけ確定する必要があります。この章ではトランザクションを使い、COMMITとROLLBACKによって複数のSQLをひとまとまりとして扱う方法を学びます。入庫・出庫処理を実際に作りながら、在庫不足への対応や複数接続から同じ商品を操作した場合についても確認し、矛盾しにくい在庫更新処理を作ります。