黑客入侵INSERT查询成为mysql UPDATE查询

时间:2011-07-29 17:04:30

标签: php mysql

我是一个MySQL菜鸟,基本上是在修改插入查询以成为更新查询。所以我确信语法很简单。但是这有什么问题?

// Save data
$mySQLQuery = 'update `'. $fl['mysql_table']. '` SET '. $fl['mysql_query']. "' WHERE speres = '" . mysql_real_escape_string($_POST['speres']);
$rs = @mysql_query($mySQLQuery);

原始的INSERT查询(工作)是

// Save data
$mySQLQuery = 'INSERT INTO `'. $fl['mysql_table']. '` SET '. $fl['mysql_query'];
$rs = @mysql_query($mySQLQuery);

此处生成数据:

$fl['mysql_query'] = "menrecin = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_17'])) . "', menrecvej = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_18'])) . "', menrecser = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_19'])) . "', menrecud = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_20'])) . "', menresmor = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_22'])) . "', menresfro = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_23'])) . "', menresmid = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_24'])) . "', menresres = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_25'])) . "', menrumind = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_28'])) . "', menrumren = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_29'])) . "', menrumved = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_30'])) . "', tekip = '" . $_SERVER['REMOTE_ADDR'] . "', tekbro = '" . $_SERVER['HTTP_USER_AGENT'] . "', tektid = NOW()";

我在数据库中有一个speres = 100525的条目,所以请尝试:

http://www.konferencer.nu/form/index.php?speres=100525

3 个答案:

答案 0 :(得分:3)

对动态SQL进行故障排除的良好做法:

  • 查看SQL,而不是构建SQL的代码。换句话说,回显$mySQLQuery以查看最终的SQL,大多数情况下您可以立即看到错误。

  • 不要压制错误。 Error-checking在任何代码中都是有用且必要的。

在我看来,您的查询最终会成为:

update `tablename` SET ..., tektid = NOW()' WHERE speres = '...;

所以你在NOW()之后有一个虚假的引用,最后是一个缺失的引用。

如果你检查过错误,你会得到这样的结果:

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for 
the right syntax to use near '' WHERE speres = '...' at line 1

答案 1 :(得分:2)

围绕WHERE子句开头的引用看起来很奇怪:

UPDATE `...some table...` SET ...some query... 'WHERE speres = ' ... some criterion ... 

请注意单引号展示位置。也许你想从双引号中删除单引号?

答案 2 :(得分:0)

您的查询应该看起来像

$mySQLQuery = 'update'. $fl['mysql_table'].'SET'. $fl['mysql_query'].'= <some value>' ' WHERE speres = '.mysql_real_escape_string($_POST['speres']);


$rs = @mysql_query($mySQLQuery);