Php mysql\u real\u escape\u字符串被忽略
我真的很感激能得到任何帮助 我在表单上遇到了很大的麻烦,我似乎根本无法让mysql\u real\u escape\u字符串正常工作 我在PHP中使用MySQL 5.5,为了测试它,我创建了一个简单的表单 “魔法引号”根本没有打开 使用此表格:Php mysql\u real\u escape\u字符串被忽略,php,mysql,Php,Mysql,我真的很感激能得到任何帮助 我在表单上遇到了很大的麻烦,我似乎根本无法让mysql\u real\u escape\u字符串正常工作 我在PHP中使用MySQL 5.5,为了测试它,我创建了一个简单的表单 “魔法引号”根本没有打开 使用此表格: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="event_ad" action="test.php" method="post">
<table>
<tr>
<td>Event Name:</td>
<td><input name="event_name" type="text" size="90" /></td>
</tr>
<tr>
<td>Start Date:</td>
<td><input name="start_date" type="text" size="90" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="Submit" type="submit" id="Submit" value="Add New Event" /></td>
</tr>
</table>
</form>
</body>
</html>
无标题文件
事件名称:
开始日期:
然后使用test.php将数据输入到表中
<?php
mysql_connect("localhost","username","password") or die(mysql_error());
mysql_select_db("databasename") or die(mysql_error());
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];
$name = mysql_real_escape_string($name);
$sql = "INSERT INTO tblevents (event_name, event_date) VALUES ('" . $name . "','" . $sdate . "')";
mysql_query($sql);
echo "success";
?>
这是出于设计,您不应该在表中看到任何转义输入。这只是为了插入。通过使用mysql\u real\u escape\u string
,您的查询如下
INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')";
这些反斜杠确保你没有弄坏撇号
MySQL“删除”所有反斜杠,直到它们被反斜杠转义:)这是出于设计,您不应该在表中看到任何转义的输入。这只是为了插入。通过使用mysql\u real\u escape\u string
,您的查询如下
INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')";
这些反斜杠确保你没有弄坏撇号
MySQL“删除”所有反斜杠,直到它们被反斜杠转义:)
当我输入事件名O'Rielly“Smith”时,它作为O'Rielly“Smith”插入MySQL表中
这就是应该发生的事情
转义使数据通过查询,以便原始数据最终进入数据库。其目的不是向存储的数据中添加额外的字符,而是阻止具有特殊含义的字符破坏SQL
当我输入事件名O'Rielly“Smith”时,它作为O'Rielly“Smith”插入MySQL表中
这就是应该发生的事情
转义使数据通过查询,以便原始数据最终进入数据库。其目的不是向存储的数据中添加额外的字符,而是阻止具有特殊含义的字符破坏SQL。将转义想象成生日礼物上的包装纸
转义数据,使数据中的任何特殊字符在传输过程中失去其特殊含义。一旦它们“进入”目标系统(html页面、数据库记录等),就不再需要转义,因为它们可能影响流程的地方现在已经结束了
包装好的礼物也是一样——一旦收到礼物,你就不再需要包装纸了,所以它就被取下了。把逃跑想象成生日礼物上的包装纸
转义数据,使数据中的任何特殊字符在传输过程中失去其特殊含义。一旦它们“进入”目标系统(html页面、数据库记录等),就不再需要转义,因为它们可能影响流程的地方现在已经结束了
包装好的礼物也一样——一旦收到礼物,你就不再需要包装纸了,所以包装纸就被取下了。效果很好
删除mysql\u real\u escape\u字符串将阻止插入数据。它工作正常
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];
$db = new mysqli("localhost", "username", "password", "databasename");
$query = "INSERT INTO tblevents (event_name, event_date) VALUES (?, ?)";
$statement = $db->prepare($query);
$statement->bind_param("ss", $name, $sdate);
$statement->execute();
$statement->close();
$db->close();
删除mysql\u real\u escape\u字符串将阻止插入数据
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];
$db = new mysqli("localhost", "username", "password", "databasename");
$query = "INSERT INTO tblevents (event_name, event_date) VALUES (?, ?)";
$statement = $db->prepare($query);
$statement->bind_param("ss", $name, $sdate);
$statement->execute();
$statement->close();
$db->close();
(我忽略了连接的错误检查)
(我忽略了连接的错误检查)忘记mysql\u real\u escape\u字符串。改用mysqli或PDO和绑定参数。你怎么知道它在做什么?您是否在回显$name
?很抱歉,它没有回答您的问题,但我强烈建议切换到类似PDO的内容。Mysql函数从PHP版本5.4开始就被弃用。另外,如果我使用以下作为事件名称:blah blah\n“”,它会直接插入到表中,我可以看到它,就像使用phpMyAdmin查看表一样。我认为mysql\u real\u escape\u string应该通过添加反斜杠来阻止这种情况。请先了解什么是转义。你最好知道你用什么来做什么。忘记mysql\u real\u escape\u string。改用mysqli或PDO和绑定参数。你怎么知道它在做什么?您是否在回显$name
?很抱歉,它没有回答您的问题,但我强烈建议切换到类似PDO的内容。Mysql函数从PHP版本5.4开始就被弃用。另外,如果我使用以下作为事件名称:blah blah\n“”,它会直接插入到表中,我可以看到它,就像使用phpMyAdmin查看表一样。我认为mysql\u real\u escape\u string应该通过添加反斜杠来阻止这种情况。请先了解什么是转义。你最好知道你用什么做什么。转义数据仅用于查询解析器。关键是要把真实的数据放到表中。Thanx Martin。这正是我一直在寻找的信息,但有趣的是,我在任何地方都找不到。我现在对这项工作有了更好的理解。干杯。如果你最喜欢我的答案,请在左边打勾接受。谢谢你。转义数据仅用于查询解析器。关键是要把真实的数据放到表中。Thanx Martin。这正是我一直在寻找的信息,但有趣的是,我在任何地方都找不到。我现在对这项工作有了更好的理解。干杯。如果你最喜欢我的答案,请在左边打勾接受。谢谢,我现在开始理解了,但不幸的是,如果我删除mysql\u real\u escape\u字符串,数据仍然会被插入到表中,不管数据有多大。这就是我感到困惑的原因。我现在开始理解了,但不幸的是,如果我删除mysql\u real\u escape\u字符串,数据仍然会插入到表中,不管数据有多大。这就是我感到困惑的原因。