0

INSERT クエリの準備済みステートメントを把握しようとしています。これは、データベースに新しいユーザーを追加することになっています。

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?)");
$statement->bind_param('s', "'$email','$passwordhash'");
$statement->execute();

シングルを使用するのは正しいですか? そのように2つの値で埋めますか?

4

3 に答える 3

2

すべての変数を個別にバインドする必要がある mysqli の方法

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
$statement->bind_param('ss', $email,$passwordhash);
$statement->execute();

しかし、自分のやり方でそれをしたい場合 (たとえば、配列の準備ができていて、1 つのプレースホルダーを使用してそれを挿入したい場合)、カスタム プレースホルダーを正しい SQL ステートメントに変換するヘルパー クラスが必要です。

$data = array('email'=>$email, 'passwordhash'=>$passwordhash);
$db->query("INSERT INTO users SET ?u");

生の mysqli よりも短くなりますが、エラー処理、プロファイリングなど、より多くのことを行うことができます。

また、挿入するフィールドの数が可変の場合、mysqli が悪夢になることにも注意してください。

于 2013-02-21T17:36:09.800 に答える
1

このようになります。

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
$statement->bind_param('ss', $email,$passwordhash);
$statement->execute();
于 2013-02-21T17:28:32.130 に答える
1

準備済みステートメントでは、それぞれ?が 1 つの値を置き換えるために使用されます。

実行すると、クエリは次のようになります。

INSERT INTO users (email,passwordhash) VALUES ("'email','password'")

それはあなたが望むものではありません。値ごとに 1 つずつ、2 つの ?s を使用する必要があります。

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
// Pass each variable as a separate parameter
$statement->bind_param('ss', $email, $passwordhash);
$statement->execute();
于 2013-02-21T17:36:48.880 に答える