限制mysql查询中的变量范围?括号?

时间:2010-05-17 16:29:04

标签: php mysql

我不记得该方法的用途是确保限制查询中变量的范围以防止mysql注入。

我应该在下面的例子中放置括号?

UPDATE table SET col_1 = '$var', col_2 = '$var2' WHERE col_1 = '$var3'

SELECT * FROM table WHERE WHERE col_1 >= '$var1'

(显然是在寻找不使用PDO的答案!)

4 个答案:

答案 0 :(得分:2)

如果要阻止SQL注入,请使用prepared statement,相当于参数化查询的MySQL。

示例:

$db_connection = new mysqli("myserver", "user", "pass", "db");
$statement = $db_connection->prepare("SELECT thing FROM stuff WHERE id = ?");
$statement->bind_param("i", $id);
$statement->execute();

是的,这意味着使用PDO

答案 1 :(得分:1)

括号与范围无关,范围与防止SQL注入无关。

如果您被禁止使用PDO和mysqli,则可以使用mysql_real_escape_string转发数据来阻止注入:

$sql = "UPDATE table SET col_1 = '".mysql_real_escape_string($var)."'";

答案 2 :(得分:0)

Brackets与防止SQL注入完全无关。

我可以使用mysql_*()函数给你答案,但我不会。

如果您想成为程序员,您必须学习最佳实践。说“显然在寻找不使用PDO的答案!”是荒谬的,你有一种可怕的态度去寻找简单的路线。

答案 3 :(得分:0)

就影响SQL注入的范围而言,我认为你在讨论PHP register_globals的设置。确保它已关闭。

注册全局变量基本上允许用户仅通过将参数传递给GET或POST来创建全局变量。因此,如果您在SQL访问中使用全局变量,并且用户可以猜测您的变量,则可以通过设置值来注入代码。

但是,Brackets与PHP中的范围无关。

请查看以下内容以避免SQL注入:

  • 服务器端验证
  • PHP过滤器
  • SQL Escaping
  • 参数化查询

你应该做这四个。