2

次の形式で Web ブラウザーを使用して、php コードに引数を渡しています。

www.site.php?age=1&sex=2

次に、これらの引数にアクセスするコードで:

'age' => $_GET['age']
'sex' => $_GET['sex']

1 つの引数は、コンマで区切られた値のセット (つまり、"1,2,3,4,5") である必要があります。次のようにすると、最初の値のみが解釈されます。

www.site.php?age=1&sex=2&nums=1,2,3,4,5

括弧、括弧などを試してみましたが、これらはすべてコードを壊します。何かご意見は?ありがとう、

編集:エラーが発生したときに誤って想定しました。実際に SQL 呼び出しを実行しようとすると、エラーが発生します。

これは機能します:

$sql = <<<SQL
    SELECT * from db
    WHERE age=:age AND nums in (1,2)
SQL;
$query = $dbs['base']['connection']->prepare($sql);

$query->execute(array(
    ':age'      => $_GET['age'],

));

しかし、数字を渡すと失敗します:

$sql = <<<SQL
    SELECT * from db
    WHERE age=:age AND nums in (:nums)
SQL;
$query->execute(array(
        ':age'      => $_GET['age'],
            ':nums'  => $_GET['nums']
    ));

$_GET['nums'] を印刷すると、コンマ区切りの値が問題なく表示されます。「nums」引数をSQLクエリに正しく渡すにはどうすればよいですか?

4

5 に答える 5

1

試しましたurlencodeか?

// set
$nums = urlencode(join(',', array(1,2,3,4,5)));

// get
$nums = explode(',', urldecode($_GET['nums']));
// i think needs sanitize
$nums = array_map('intval', $nums);
于 2013-01-26T02:54:18.227 に答える
0

文字列が必要な場合は、コンマを URL エンコードしますか?

www.site.php?age=1&sex=2&nums=1%2C2%2C3%2C4%2C5

また、HTTP には、PHP が自動的に解釈できるパラメーターの配列形式があります。構文は忘れてしまいましたが、とても簡単です。

編集2:気にしないで、文字列が必要です。

于 2013-01-26T02:51:42.027 に答える
0

このようなテストがうまくいかない理由がわかりません。<pre>print_r()はデバッグ用に厳密に存在することに注意してください。explode(',', $_GET['nums'])が鍵です。

echo '<pre>';
$nums_array = explode(',', $_GET['nums']);
print_r($nums_array);
echo '</pre>';

理解を深めるために、解析コードの一部を共有する必要があるのではないでしょうか?

于 2013-01-26T03:01:41.260 に答える
0

送信ページでカンマをよりわかりやすいものに変換します

$nums = "1,2,3,4,5";
$nums = str_replace(',','|',$nums);

GET を受け取るページで、次の操作を行います。

$nums = str_replace('|',',',$nums);
于 2013-01-26T03:01:50.650 に答える
0

現在のデータベース インターフェースでは、それはできません。準備済みステートメントを使用します。リストは文字列に変換されるため、IN句の値リストではなくなります。

これが、たとえば次のようなものを使用している理由です。

db("SELECT * from t1 WHERE id=? AND x IN (??)", $id, $array);

ただし、入力リストの長さに応じて、いくつかの?,?,?,?,?プレースホルダーを手動で作成する必要があります1 。そして、はい、名前付きのものではなく、列挙されたパラメーターが必要です。

1つまらない/退屈だから、ここではサンプル コードを提供しません。

于 2013-01-26T03:18:36.977 に答える