2016-01-14 51 views
0

下面是该查询:

$table = $_GET['type']; 
$q="DELETE FROM '$table' WHERE cont_id='".$_GET['where']."'"; 

我也试过在$_GET部除去单/双引号,但没有奏效。我在执行查询之前打印了变量的值,他们是正确的,所以我不认为这是问题。

任何想法?

+1

你的代码是注射非常脆弱。您应该切换到使用[准备好的语句](http://php.net/manual/en/pdo.prepared-statements.php)。 – Ben

回答

2

数据库表名不应加上单引号。

更正SQL:

$q="DELETE FROM $table WHERE cont_id='".$_GET['where']."'"; 

表和字段名称可以与反引号('),以避免与

MySQL reserved keywords冲突包围。

在这种情况下,修正SQL应该是:

$q="DELETE FROM `$table` WHERE `cont_id` = '".$_GET['where']."'"; 

另外,不要从用户的信任输入。

这可能会导致安全漏洞。

使用mysqli_real_escape_string()$_GET['where']

+0

这是一个很好的做法,用单引号括起变量'''带反引号的表名'' – Ben

+0

这很有道理,谢谢!我对反引号和单引号感到困惑。 – user3484582

1
$table = $_GET['type']; 
$q="DELETE FROM $table WHERE cont_id='".$_GET['where']."'"; 

OR

$table = $_GET['type']; 
$q="DELETE FROM `$table` WHERE cont_id='".$_GET['where']."'"; 
2

在你想要的报价表名,你不得不使用符号 “`”

$table = $_GET['type']; 
$q="DELETE FROM `$table` WHERE cont_id='".$_GET['where']."'";