Php mysql\u real\u escape\u字符串被忽略

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">

我真的很感激能得到任何帮助

我在表单上遇到了很大的麻烦,我似乎根本无法让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">
<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字符串,数据仍然会插入到表中,不管数据有多大。这就是我感到困惑的原因。