文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在 PHP 中将特殊字符插入数据库

2024-02-27 20:48

关注

本文将介绍 mysqli_real_escape_string() 函数以在 PHP 中将特殊字符插入数据库。我们将比较使用和不使用 mysqli_real_escape_string() 函数的插入数据。


创建 HTML 表单并设置数据库连接以收集数据

首先,必须创建一个 HTML 表单供用户输入数据,并且必须设置一个数据库连接来发送命令和接收输入。

以下是我们将在本教程中使用的代码。

HTML 代码:


<!DOCTYPE html>
<head>
    <title>
        Real Escape Strings
    </title>
</head>
<body>
    <form action = 'login.php' method = 'post' >
        <div align="ccenter">
            <label for="username"><b>User Name</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
            <input type="text" placeholder="Your Name" name="username" required>
            </br>
            <label for="password"><b>User Password</b></label>
            <input type="password" placeholder="Your Password" name="userpassword" required>
            </br>
            <label for="userlocation"><b>User Location</b>&nbsp;</label>
            <input type="text" placeholder="Your Location" name="userlocation" required>
            </br>	</br>	</br>
            <input type="submit" name="1" value = "Insert without mysqli_real_escape_string " />
            </br>
            </br>
            <input type="submit" name="2" value = "Insert with mysqli_real_escape_string " />
        </div>
    </form>
</body>
</html>

数据库连接代码:


<?php
error_reporting(0);
define("server", "localhost");
define("user", "root");
define("password", "");
define("database", "demo");
$mysqli = mysqli_connect(server , user, password, database);
if ($mysqli -> connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
exit();
}
//db connection code ends
?>

我们获得以下基础知识:


在 PHP 中使用 mysqli_real_escape_string() 将特殊字符插入数据库

要从表单字段中获取带有特殊字符的用户输入,我们使用 mysqli_real_escape_string() 函数。

我们需要以下参数:数据库连接和我们想要转义的字符串。我们的数据库连接是 $mysqli,我们要转义的字符串是 $_POST['username']

程序样式语法:


<?php
//Note: This is a demo syntax, you can run the next PHP code blocks for output
$username= $mysqli_real_escape_string($mysqli, $_POST['username']);
?>

例子:


<?php
//Second example: insert user data using mysqli real escape string
//ensure that users do not send empty data, see the following condition
if(isset($_POST['2']) && !empty($_POST['username']) && !empty ($_POST['userpassword']) && !empty ($_POST['userlocation']))
{
//You apply real_escape_string on $_POST[''] form fields (user input)
$username =  mysqli_real_escape_string($mysqli, $_POST['username']);
$userpassword = mysqli_real_escape_string($mysqli, $_POST['userpassword']);
$userlocation = mysqli_real_escape_string($mysqli, $_POST['userlocation']);
//same query (the values are dynamic, we escaped the strings)
$query="INSERT INTO user_login (username, userpassword, userlocation) VALUES ('$username', '$userpassword', '$userlocation')";

if (!mysqli_query($mysqli, $query)) {
    echo "Failed!";
}
else{
    //success
    echo "Data inserted";
}
//close connection
$mysqli -> close(); 
}// ends first condition

输出:

PHP:使用 mysqli_real_escape_string 插入数据

mysqli_real_escape_string() 函数消除了特殊字符,从而提高了数据库的安全性。

它会生成用于 SQL 查询的有效 SQL 表达式。另外,除了 prepared statements 之外,避免 SQL 注入也是一种比较安全的方法。

参考下面的另一个示例,它不使用 mysqli_real_escape_string() 函数。


<?php
//example-1: insert data without mysql real escape

if(isset($_POST['1'])){
    $username = $_POST['username'];
    $userpassword = $_POST['userpassword'];
    $userlocation= $_POST['userlocation'];
    $query="INSERT INTO user_login (username, userpassword, userlocation) VALUES
    ('$username', '$userpassword', '$userlocation')";
    if (!$mysqli -> query($query)){
        echo "Query failed to execute because of special characters!";
    }
    else{
	    echo "User Data Inserted!";
    }
    //first example ends here
}
?>

输出:

PHP:在没有 mysqli_real_escape_string 的情况下插入数据

如我们所见,由于用户输入中的特殊字符,它无法执行和收集数据。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯