2011-12-18 6 views
0

私はmysqliが用意したステートメントのラッパーをテストしていました。私のテーブルゲストでは、first_nameはvarchar [32](基本的に文字列)で、idは整数です。私の関数は、以下の例の$ first_nameや$ idのようなパラメータのgetTypeを使って、bind_paramメソッドの$ typesパラメータを構築します。私は、$ idがフォーム入力から取り出され、実際に文字列であるときに起こるような問題に取り組む準備ができました。何かが問題ではないことを気づいたときに何か文字列を入力するとどうなりますか0_

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

以下のすべてのケースで成功した挿入が行われました:

$ id = "1"; $ first_name = "Frank";$ types paramは 'ss'でした。

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

だから、どうしたのですか?

編集:

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

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

答えて

1

$typesパラメータは、生成されたSQLに影響を与えますので、最初の例では、次のSQL与える:

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

と第二:

update guests set first_name = 3 where id = 1; 

をMySQLが扱うように、これらは、両方とも有効なSQLステートメントですあなたのための型変換。したがって、$typesパラメータは重要ですが、生成するSQL文の妥当性に限ります。

関連する問題