4

InnoDBデータベースに 2 つのテーブルがあるcategoriesとしましょうjokes。そして、私はPHP/MySQLiを使用して作業を行っています。テーブルは次のようになります。

CATEGORIES
id (int, primary, auto_inc)  |  category_name (varchar[64])
============================================================
1                               knock, knock

JOKES
id (int, primary, auto_inc)  |  category_id (int)  | joke_text (varchar[255])
=============================================================================
empty

ここでの以前の回答のおかげで、、 で構成される新しいジョークを追加するには、次のことができることがわかりまし$joke_text$category_id

INSERT INTO jokes (category_id, joke_text)
SELECT c.id, '$joke_text'
FROM categories AS c WHERE c.id = $category_id;

これにより、外部キーを使用せずに、$category_id値が既存のカテゴリを参照していることを確認できます(私の質問は「複雑な」準備済みステートメントの学習を支援することを目的としているため、外部キーの問題は無視してください)。

それでうまくいきました。しかし、私は今準備文を学ぼうとしていて、一日中費やした後、ようやく基本を理解しました。残念ながら、mysqliの下で準備済みステートメントを使用して上記の SQL クエリを実行する方法がまったくわかりません。そのような問題に関する情報をオンラインで見つけることができませんでした。

誰かが私を助けることができれば、私は非常に感謝しています.

4

2 に答える 2

2

最初に、作成した通常のステートメントと非常によく似たステートメントを作成します

$stmt = $mysqli->prepare("INSERT INTO jokes (category_id, joke_text)
SELECT c.id, ?
FROM categories AS c WHERE c.id = ?;");

パラメータにバインドされたステートメントを取得します 's' は文字列データを表し、i は整数を表します

$stmt->bind_param('si', $joke_text,$category_id);   // bind to the parameters

/* 準備済みステートメントを実行します */

$stmt->execute();
于 2013-08-23T02:44:41.527 に答える
0

私は実際にいくつかのコードを書いていましたが、これもオンラインで検索していることに気付きました。代わりに、これらの多くを確認できる PHP Web サイトへのリンクを用意しました。

準備されたステートメント

一般的なmysqli

MySQLi を学んでいるので、代わりに PDO に移行してみませんか。非常に似ていますが、これが未来に向かっているところだと思います。

http://php.net/manual/en/book.pdo.php

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2013-08-23T02:45:51.520 に答える