PHP mysql_real_escape_string() 函数

news/2024/7/24 13:37:38 标签: php, 数据库, python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

PHP MySQL 函数

定义和用法

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00

  • \n

  • \r

  • \

  • '

  • "

  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

语法

mysql_real_escape_string(string,connection)

参数描述
string必需。规定要转义的字符串。
connection可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

说明

本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。

提示和注释

提示:可使用本函数来预防数据库攻击。

例子

例子 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }// 获得用户名和密码的代码// 转义用户名和密码,以便在 SQL 中使用$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);

$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"// 更多代码mysql_close($con);
?>

例子 2

数据库攻击。本例演示如果我们不对用户名和密码应用 mysql_real_escape_string() 函数会发生什么:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql);// 不检查用户名和密码
// 可以是用户输入的任何内容,比如:$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";

// 一些代码...

mysql_close($con);
?>

那么 SQL 查询会成为这样:

SELECT * FROM users
WHERE user='john' AND password='' OR ''=''

这意味着任何用户无需输入合法的密码即可登陆。

例子 3

预防数据库攻击的正确做法:

<?php
function check_input($value)
{// 去除斜杠if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }// 如果不是数字则加引号if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}

$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }// 进行安全的 SQL$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";

mysql_query($sql);

mysql_close($con);
?>

PHP MySQL 函数


转载于:https://my.oschina.net/ajian2014/blog/315621


http://www.niftyadmin.cn/n/936597.html

相关文章

eclipse闪退解决(转)

最近帮同事解决一个eclipse闪退解决的问题&#xff0c;从网上找了N多方法皆无效&#xff0c;最后用一个园友的博客上的方法解决了&#xff0c;特转载一下。 解决办法&#xff1a; 删除文件 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi 原博文地址&…

springmvc freemarker 返回全局返回

我再程序中 有用到一些数据需要从后台返回数据到页面。任何controller 都需要用的数据&#xff0c;所以我在想一个能统一返回的东西。至于springmvc 中如何做到我目前不知道&#xff0c;所以我就取巧用freemarker 来处理。 定义一个类&#xff0c;继承FreeMarkerView&#xff0…

java中的文件file的创建和读取

java.io.File && java.io.Reader package File; import java.io.*; /*createNewFile()当且仅当具有该名称的文件尚不存在时&#xff0c;原子地创建一个由该抽象路径名命名的新的空文件。exists() 测试此抽象路径名表示的文件或目录是否存在。 * */import java.io.Fil…

C语言的本质(10)——指针本质

指针&#xff0c;大概是C语言中最难理解的概念之一了。指针这个东西是C语言中的一个基本概念&#xff0c;C99中对于指针的定义是&#xff1a;1. 指针的类型是derived from其它类型&#xff0c;也就是说指针的类型是由它指向的类型决定的&#xff1b;2. 指针是一种reference类型…

mysql学习笔记 第九天

order by ,limit 和where子查询的使用 order by:  order by 列名1&#xff0c;[列名2],[列名3]...(结果先按列1进行排序&#xff0c;在列1的相同的情况下&#xff0c;再按照列2的排序&#xff0c;以此类推)。 mysql> select goods_id,goods_name,shop_price from goods-&g…

gitee commit 和 push 报错

git 提交 commit时&#xff0c;报错&#xff1a; Your branch is ahead of origin/master by 2 commits. Your branch is ahead of origin/master by 2 commits. 原因&#xff1a;在之前已经有2个commit而没有push到远程分支上 解决方法&#xff1a; &#xff08;1&#xff…

OC中类的扩展介绍

对OC类的扩展总结如下&#xff1a; 共有4个&#xff1a; 1、子类 subClass 作用&#xff1a;可以使用类的继承来增添父类的变量和方法。 写法&#xff1a;在.h文件中 interface Student : Person 2、分类 Category 作用&#xff1a;可以增添父类的功能&#xff0c;但不能定义变…

java实现文件复制拷贝

package File;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 利用File和reader完成复制一份文件内容1.创建字节输入流&#xff0c;并关联数据源文件2.创建字节输出流&#xff0c;并关联目的文件3.定义变量&#xff0c;记录读取的文…