0

私はこのコードを持っています - これはURLから変数を取得し、基準に基づいてMYSQL選択を実行しようとしています(NULL値を除く)。しかし、私はどこかに行くと信じていますが、どこにあるのかわかりません:

<?php

    include('db.php'); // include your code to connect to DB.
    $tbl_name="mobile"; //your table name

    $model = ($_GET['model'] ? $_GET['model'] : NULL);
    $mins = ($_GET['mins']  ? $_GET['mins']  : NULL);    
    $texts = ($_GET['texts'] ? $_GET['texts'] : NULL); 
    $freegift = ($_GET['free-gift'] ? $_GET['free-gift'] : NULL);
    $network = ($_GET['network']   ? $_GET['network']   : NULL);
    $plan = ($_GET['plan']  ? $_GET['plan']  : NULL);
    $vars = array($model, $mins, $texts, $freegift, $network, $plan);


    foreach($vars as $value) {
        $value = (isset($_GET[$value]) ? $_GET[$value] : NULL);
        unset ($vars[$value]);  //sweeping the NULL ones 
    }
    $where_clause = $vars[0]; //the only remaining value after previous cleanup


    $where = '';
    if (count($whereClauses) > 0) {
        $where = ' WHERE '.implode(' AND ',$whereClauses);
    }
    $sql5 = mysql_query("SELECT * FROM $tbl_name".$where);

これはまったく機能しません。それは次のように機能するはずですwww.domain.com/page.php?mobile=Samsung&mins=500-検索を実行するには変数を使用する必要があります。

4

2 に答える 2

0

SQLインジェクションとそれを回避する方法について詳しくは、こちらをご覧ください。

http://www.sqlmag.com/article/tsql3/how-to-avoid-sql-injection

また、クエリではLIMIT、sqlserverが毎回すべてのレコードを返すことを回避する必要があります。

于 2012-04-09T15:41:37.307 に答える
0

私はあなたが何を望んでいるのか理解していると思います。しかし、コードにエラーが多すぎます (セマンティックとセキュリティの両方)。したがって、次のコードをお勧めします。

include 'db.php';
$tbl_name = 'mobile';

$default_list = array('model', 'mins', 'texts', 'free-gift', 'network', 'plan');
$ins_vars = array_intersect_key($_GET, array_flip($default_list));

if(!empty($ins_vars))
{
   foreach($ins_vars as $key => $val)
   {
      $val = mysql_real_escape_string($val);
      $ins_vars[$key] = "{$key}='{$val}'";
   }

   $where_clause = implode(' AND ', $ins_vars);
   $sql5 = mysql_query("SELECT * FROM {$tbl_name} WHERE {$where_clause}");
}

ps。テストされていませんが、動作するはずです。

于 2012-04-09T15:34:21.610 に答える