6-3 マニュアルから読み書きする(prepare・bind・run)

帳簿を引くとき、毎回文を一から書くより、雛形を用意して空欄だけ埋める方が安全です。お客さんの言葉は空欄に入れるだけで、文そのものには混ぜないので、帳簿を壊す文が紛れ込みません。
いま読んでいるこのサイト(Cloudflare Lab)のマニュアルも、この形で帳簿に書き込みます。
ここでは、雛形と空欄、受け取り方、書き込みの結果、まとめて送る方法の順に見ます。
Learning goals
この節でできるようになること
- prepare と bind の役割を説明できる
- first・all・run・raw の返り方の違いを言える
- run の結果に付く meta で何が分かるかを言える
- batch が何を減らすかを説明できる
1. 雛形と空欄
Section titled “1. 雛形と空欄”「この会社名の行を出して」という文の、会社名の部分だけを空欄にした雛形を用意します。空欄には後から値を入れます。
Cloudflare では、雛形を prepare、空欄に値を入れる操作を bind と呼びます。公式は、空欄は SQLite の慣習どおり ?(順番)や ?NNNN(番号付き)で書けると説明しています。
次のコードは「Customers の表から、会社名が指定の値の行を出す」雛形です。読めなくても大丈夫です。
const { results } = await env.prod_d1_tutorial .prepare("SELECT * FROM Customers WHERE CompanyName = ?") .bind("Bs Beverages") .run();? が空欄、bind("Bs Beverages") が空欄に入れる値、run() が実行です。

雛形の空欄に値の札を差し込んでから、帳簿に渡します。値と文が混ざらないので安全です。
つまり、prepare が文の雛形、bind が空欄の値です。
2. 受け取り方を選ぶ
Section titled “2. 受け取り方を選ぶ”問い合わせの結果は、1 行だけ欲しいときと、全部欲しいときがあります。
公式は、first() は最初の 1 行をオブジェクトで返し(無ければ null)、run() は結果と meta を返し、raw() は meta なしで配列の配列を返す、と説明しています。first には列名を指定して、その値だけを受け取る使い方もあります。
実物では、「件数」や「最新の 1 件」は first、「一覧」は run(または all)、軽く配列だけ欲しいなら raw、と使い分けます。
first()
run()

同じ問い合わせでも、受け取る袋の形が違います。1 行だけの袋、全部と控えが入った袋、控えを付けない袋です。
つまり、受け取り方は first・run・raw から選びます。
3. 書き込みと、その結果
Section titled “3. 書き込みと、その結果”行を足したり直したりするときも、雛形と空欄は同じです。違うのは、結果に「何行書いたか」が付いてくることです。
公式は、run() の戻り値の meta に、実行時間(duration)、変更数(changes)、めくった行数(rows_read)、書き込んだ行数(rows_written)、最後の行の ID(last_row_id)などが含まれると説明しています。
実物では、INSERT の後に meta.rows_written が 1 なら 1 行足せた、と確かめられます。第 6-4 節の料金は、この rows_read と rows_written で数えます。

書き込みの控えに「めくった行数・書いた行数」が印刷されています。料金の単位はこの数字です。
つまり、run の meta を見れば、何行めくって何行書いたかが分かります。
4. まとめて送る
Section titled “4. まとめて送る”問い合わせを 1 つずつ送ると、そのたびに帳簿との往復が発生します。何件も続けて書くなら、まとめて送る方が速くなります。
Cloudflare では、複数の問い合わせ文を 1 回で送る batch() があります。公式は、単一の呼び出しで複数の SQL 文を送り、ネットワークの往復の遅れを減らすと説明しています。
実物では、複数の検証結果を一度に帳簿へ書くとき、batch で 1 往復にまとめます。

問い合わせ文の束を 1 回で帳簿に渡しています。往復が 1 回で済みます。
つまり、続けて書くときは batch でまとめます。
Cloudflare Lab での使われ方
Section titled “Cloudflare Lab での使われ方”ここで紹介した読み書きが、いま読んでいる Cloudflare Lab でどう使われるかを見ます。
Cloudflare Lab は Phase 2 で、検証の結果を INSERT の雛形に bind して書き、一覧ページでは run で読み出す予定です。1 回の検証で複数の URL を調べるので、書き込みは batch でまとめます。実測(1 回の検証で rows_written が何行か)は実装後に追記します。
つまずきやすいところ
Section titled “つまずきやすいところ”この節のまとめ
Section titled “この節のまとめ”- prepare が雛形、bind が空欄の値です。
- 受け取り方は first(1 行)・run(結果と meta)・raw(配列だけ)です。
- run の meta で rows_read / rows_written が分かり、batch で往復を減らせます。
この節で出てきた言葉を、つながりの順に並べると次のようになります。
図のラベル: 問い合わせ文の雛形 prepare / 空欄に値を入れる bind / 1 行だけ first / 結果と meta run / めくった行数・書いた行数 rows_read / rows_written / まとめて 1 往復 batch
次の節では、無料で使える範囲と上限を数字で見ます。
この節のチェック
© 2026 osdse