根据URL变量进行搜索

时间:2012-04-09 14:34:19

标签: php mysql

我有这个代码 - 它试图从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一样工作 - 应该使用变量来执行搜索。

2 个答案:

答案 0 :(得分: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。未经测试但应该有效。

答案 1 :(得分:0)

你应该阅读更多关于sql注入的内容以及如何避免它:

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

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