2

私は からmysql_に変換していますがmysqli_、まだに慣れていませんmysqli_。これが私のコードです:

$stmt = mysqli_prepare($con, "INSERT INTO test VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'ss', $a, $b);

$a=1;
$b=1.5;


mysqli_stmt_execute($stmt);

私の質問は:

$a has Integer value
$b float

しかし、対応する変数の型はmysqli_stmt_bind_param ss (string,string).

その結果、データがテーブルに正常に挿入されました。意図したとおりに動作していますか、それとも間違っていますか?

4

3 に答える 3

0

このステートメントが対象とするテーブルのフィールドは、整数/浮動小数点数として設定されていますか? または、データベース内の文字列として設定されています (何らかの理由でこれを行う人もいます)。また、準備されたステートメントが遅いことについては、一度だけ実行される一意のクエリを実行する場合にのみ発生すると思います。ループ内で複数のクエリを作成している場合、準備済みステートメントは大幅に高速になると思います (ステートメントがループの外で作成された場合)。

于 2013-11-07T00:59:59.303 に答える
0

実際にはバインド関数 (mysqli_stmt_bind_paramまたはPDOStatement::bindParam) は検証関数ではありません。値のみを解釈する方法と、結果から取得する値のタイプを示します。

答えは: 意図したとおりに動作します。

于 2013-11-07T00:29:26.387 に答える
0

ソース変数は実際には任意の型にすることができますが、クエリが取ると言った型であるため、クエリを準備するときに文字列に変換しようとします。

本当に重要なのは、テーブル内のフィールドの型です。PHP がこれをどのように処理するかはわかりませんが、クエリが整数 ( i) を受け取り、それを文字列 ( ) として準備しようとするとs、エラーが発生する可能性があります。いずれにせよ、問題を回避するために正しいタイプを指定する必要があります。

于 2013-11-07T06:24:51.590 に答える