PHP参数化SQL

PHP中写SQL,不使用PDO的话,如何不拼接SQL,从而避免注入攻击?

php

4个回答

$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);

or

$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();

直接写sql的方式是一定没办法避免注入攻击的

我一般是在页面引入一个这样的文件

/**

  • 根据服务器配置信息来判断是否需要加反斜线
  • @param mixed $mixed
  • @since 2007/03/04 */ function __addslashes(&$mixed) { if (get_magic_quotes_gpc()) { return; } if (is_array($mixed)) { foreach ($mixed as $key => $value) { $mixed[$key] = addslashes($value); } } else { addslashes($mixed); } }

/**

  • 防止字符串中有SQL注入非法字符
  • (晕~又是一年) *
  • @param mixed $mixed
  • @since 2008/03/28 */ function __antiSQLInjection(&$mixed) { if (is_array($mixed)) { array_map('mysql_real_escape_string', $mixed); } else { mysql_real_escape_string($mixed); } }

__addslashes($_POST);
__antiSQLInjection($_POST);

__addslashes($_GET);
__antiSQLInjection($_GET);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问