コンテンツにスキップ

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

Plan: Free費用: 0円Wrangler 4.126.0公式ドキュメント取得日 2026-08-27
問い合わせ文の雛形の空欄に値の札を差し込む
prepare が雛形、bind が空欄の値です。

帳簿を引くとき、毎回文を一から書くより、雛形を用意して空欄だけ埋める方が安全です。お客さんの言葉は空欄に入れるだけで、文そのものには混ぜないので、帳簿を壊す文が紛れ込みません。

いま読んでいるこのサイト(Cloudflare Lab)のマニュアルも、この形で帳簿に書き込みます。

ここでは、雛形と空欄、受け取り方、書き込みの結果、まとめて送る方法の順に見ます。

Learning goals

この節でできるようになること

  • prepare と bind の役割を説明できる
  • first・all・run・raw の返り方の違いを言える
  • run の結果に付く meta で何が分かるかを言える
  • batch が何を減らすかを説明できる

「この会社名の行を出して」という文の、会社名の部分だけを空欄にした雛形を用意します。空欄には後から値を入れます。

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 が空欄の値です。

問い合わせの結果は、1 行だけ欲しいときと、全部欲しいときがあります。

公式は、first() は最初の 1 行をオブジェクトで返し(無ければ null)、run() は結果と meta を返し、raw() は meta なしで配列の配列を返す、と説明しています。first には列名を指定して、その値だけを受け取る使い方もあります。

実物では、「件数」や「最新の 1 件」は first、「一覧」は run(または all)、軽く配列だけ欲しいなら raw、と使い分けます。

first()

最初の 1 行だけ。無ければ null。件数や最新 1 件に向きます。

run()

結果の配列と meta(実行時間・めくった行数など)。一覧に向きます。
1 行の袋、全部の袋、控えを付けない袋
受け取り方は first・run・raw から選びます。

同じ問い合わせでも、受け取る袋の形が違います。1 行だけの袋、全部と控えが入った袋、控えを付けない袋です。

つまり、受け取り方は first・run・raw から選びます。

行を足したり直したりするときも、雛形と空欄は同じです。違うのは、結果に「何行書いたか」が付いてくることです。

公式は、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 で rows_read / rows_written が分かります。

書き込みの控えに「めくった行数・書いた行数」が印刷されています。料金の単位はこの数字です。

つまり、run の meta を見れば、何行めくって何行書いたかが分かります。

問い合わせを 1 つずつ送ると、そのたびに帳簿との往復が発生します。何件も続けて書くなら、まとめて送る方が速くなります。

Cloudflare では、複数の問い合わせ文を 1 回で送る batch() があります。公式は、単一の呼び出しで複数の SQL 文を送り、ネットワークの往復の遅れを減らすと説明しています。

実物では、複数の検証結果を一度に帳簿へ書くとき、batch で 1 往復にまとめます。

問い合わせ文の束を 1 回で帳簿に渡す
batch で往復を 1 回にまとめます。

問い合わせ文の束を 1 回で帳簿に渡しています。往復が 1 回で済みます。

つまり、続けて書くときは batch でまとめます。

ここで紹介した読み書きが、いま読んでいる Cloudflare Lab でどう使われるかを見ます。

Cloudflare Lab は Phase 2 で、検証の結果を INSERT の雛形に bind して書き、一覧ページでは run で読み出す予定です。1 回の検証で複数の URL を調べるので、書き込みは batch でまとめます。実測(1 回の検証で rows_written が何行か)は実装後に追記します。

  • 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

次の節では、無料で使える範囲と上限を数字で見ます。

この節のチェック

問 1問い合わせ文の雛形を用意するメソッドはどれですか?

問 2空欄(?)に値を入れるメソッドはどれですか?

問 3最初の 1 行だけを受け取り、無ければ null を返すメソッドはどれですか?

問 4run() の結果の meta に含まれるものはどれですか?

問 5batch() が減らすものはどれですか?

最終更新日: