23

私のサイトはかなり広範囲で、最近 PHP5 に切り替えました (遅咲きと呼んでください)。

以前のMySQLクエリはすべて、次のように構築されました。

"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";

これにより、非常に簡単でシンプルでフレンドリーになりました。

私は現在、明らかなセキュリティ上の理由から mysqli に切り替えようとしていますが、特定の引数が必要なSELECT * FROM場合に同じクエリを実装する方法を理解するのに苦労しています。bind_param

この発言は過去のものですか?

そうである場合、大量の列が含まれるクエリをどのように処理すればよいですか? 毎回それらをすべて入力する必要がありますか?

4

7 に答える 7

31
"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";

になります

"SELECT * FROM tablename WHERE field1 = ? && field2 = ?";

これは:に渡され$mysqli::prepareます

$stmt = $mysqli->prepare(
  "SELECT * FROM tablename WHERE field1 = ? && field2 = ?");
$stmt->bind_param( "ss", $value, $value2); 
// "ss' is a format string, each "s" means string
$stmt->execute();
 
$stmt->bind_result($col1, $col2);
// then fetch and close the statement

OPコメント:

したがって、5つのパラメーターがある場合、「sssis」などを使用できる可能性があります(入力のタイプによって異なりますか?)

そうです、プリペアドステートメントのパラメーターごとに1つの型指定子?があり、それらはすべて定位置です(最初の指定子は最初?に適用され、最初の実際のパラメーター(の2番目のパラメーターbind_param)に置き換えられます)。

于 2009-04-15T07:45:47.507 に答える