0

PHPは初めてで、コースに登録しているので、明日チューターに尋ねることができます。

SQL クエリがあり、正常に動作します。しかし、select ステートメントに and 'and' を追加しようとしています。

これは私が今持っているものです

$query = "SELECT * from table1 where table1.age <= " . $_POST['min_age'] ;

リンクされた html ページに「地域」の入力があり、min_age と地域の値がユーザーが入力した値と一致する場合にのみ結果が返されるようにします。

「およびどこに」を追加しようとしましたが、機能しません。それが複数の「」のためなのか、それとも別の方法が必要なのかわかりません。

ありがとう

4

1 に答える 1

2

複数の条件が必要な場合は、次のように区切りますAND

... WHERE table1.age <= ? AND table1.region = ?

再度使用する必要はありませんWHEREif()PHP で複雑な条件を記述している場合に、複数回使用する必要がないのと同じように。


PS: これはあなたの質問とは直接関係ありませんが、$_POST または $_GET 変数を SQL クエリに直接入れないことを習慣にする必要があります。これはハッキングの良い方法です。「SQL インジェクション」について家庭教師に尋ねるか、私のプレゼンテーションSQL Injection Myths and Fallacies を読んでください。

始めたばかりだとは思いますが、電気技師になるための訓練を受けているのであれば、感電や火災を避ける方法を学ぶことを最優先するでしょう。

mysqli を使用してクエリを作成する方法を次に示します。クエリ パラメーターを使用する利点の 1 つは、引用符の開始位置と終了位置を気にする必要がないことです。

$query = "SELECT * from table1 where table1.age <= ? AND table1.region = ?";
$stmt = $mysqli->prepare($query) or trigger_error($mysqli->error, E_USER_ERROR);

$stmt->bind_param("is", $_POST["min_age"], $_POST["region"]);
$stmt->execute() or trigger_error($stmt->error, E_USER_ERROR);

ここで示しているもう 1 つの良い習慣は、prepare() または execute() がエラーを返す場合は常に報告することです。


変数を SQL に補間する必要がある場合は、まず、値を整数に変換するか、mysqli_real_escape_string() などの適切なエスケープ関数を使用して変数を保護してください。 $_POST 変数を文字列に直接入れないでください。また、二重引用符で囲まれた文字列に変数を直接埋め込むために PHP の構文を使用する場合は、引用符を停止して再開する必要はありません。

$age = (int) $_POST["min_age"];
$region = $mysqli->real_escape_string($_POST["region"]);
$query = "SELECT * from table1 where table1.age <= {$age} 
    AND table1.region = '{$region}'";
于 2013-10-23T18:38:46.567 に答える