我不记得该方法的用途是确保限制查询中变量的范围以防止mysql注入。
我应该在下面的例子中放置括号?
UPDATE table SET col_1 = '$var', col_2 = '$var2' WHERE col_1 = '$var3'
和
SELECT * FROM table WHERE WHERE col_1 >= '$var1'
(显然是在寻找不使用PDO的答案!)
答案 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注入:
你应该做这四个。