0

我有这段代码——它试图从 URL 中获取变量,然后根据条件(NULL 值除外)进行 MYSQL 选择。但是,我相信我要去某个地方,但我不知道在哪里:

<?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

我想我明白你想要什么。但是您的代码有太多错误(语义和安全性)。因此,我建议使用以下代码:

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}");
}

附言。未经测试,但应该可以工作。

于 2012-04-09T15:34:21.610 回答
0

您应该在此处阅读有关 sql 注入以及如何避免它的更多信息:

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

并且您的查询应该LIMIT避免 sqlserver 每次都返回所有记录。

于 2012-04-09T15:41:37.307 回答