我有这个代码 - 它试图从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
一样工作 - 应该使用变量来执行搜索。
答案 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每次都返回所有记录。