mysqli_stmt :: bind_paramでの$ typesパラメータの重要性

私はmysqli準備ステートメントのために自分のラッパーをテストしてきたし、私が期待していなかったものをまっすぐに来た。私のテーブルゲストでは、first_nameはvarchar [32](基本的に文字列)で、idは整数です。私の関数は、以下の例の$ first_nameや$ idのようなパラメータのgetTypeを使って、bind_paramメソッドの$ typesパラメータを構築します。私は$ idがフォーム入力から取られ、実際には文字列か、somewoneが数値である文字列を入力した場合に何が起こるかのような問題に取り組む準備ができました。

$SQL = 'update guests set first_name = ? where id = ?';
$mysqli->execute($SQL, $first_name, $id);

次のすべてのケースで成功した挿入が行われました。

$ id = "1"; $ first_name = "フランク"; $ types paramは 'ss'でした。

$ id = 1; $ first_name = 3; $ types paramは 'ii'でした。

だから、これはどうしたの?

編集:

call_user_func_array(array($statement, 'bind_param'), $bind_params);

あなたは私がbind_paramを呼び出す方法が要因だと思いますか?いずれにせよ、私は理由を知りたいです。

0

1 答え

$ types パラメータは生成されたSQLに影響するため、最初の例では次のSQLを提供しています:

update guests set first_name = 'Frank' where id = '1';

第2の:

update guests set first_name = 3 where id = 1;

これらはどちらも有効なSQL文です.SQLはあなたのために型変換を処理します。したがって、 $ types パラメータは重要ですが、生成するSQL文の妥当性にのみ影響します。

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com