0

我非常感谢我能得到的任何帮助。

我在使用表单时遇到了真正的麻烦,我似乎根本无法让 mysql_real_escape_string 工作。

我正在使用 MySQL 5.5 和 PHP 并对其进行测试,我创建了一个简单的表单 Magic Quotes 根本没有打开。

使用这种形式:

<!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";
?>

(连接细节已更改)

当我输入事件名称 O'Rielly "Smith" 时,它作为 O'Rielly "Smith" 插入到 MySQL 表中

没有反斜杠,根本没有转义。

我真的在互联网上搜索过,试图解决这个问题,但似乎它适用于其他所有人。

我在这里误解了一些基本的东西吗?如果有人能引导我朝着正确的方向前进,我将不胜感激。

这是我在这个论坛上的第一篇文章,html 和代码格式似乎与我访问过的大多数论坛不一样,并且您无法预览所以我希望结果可以。

提前感谢任何提供帮助的人。干杯艾尔。

4

5 回答 5

3

这是设计使然,您不应该在表格中看到任何转义输入。只是为了插入。通过使用mysql_real_escape_string,您的查询看起来像

INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')";

这些反斜杠确保您不会破坏撇号

MySQL“删除”所有反斜杠,直到它们被反斜杠转义:)

于 2012-05-03T14:35:00.410 回答
2

当我输入事件名称 O'Rielly "Smith" 时,它作为 O'Rielly "Smith" 插入到 MySQL 表中

这就是应该发生的事情。

转义使数据通过查询,以便原始数据最终进入数据库。目的不是为您存储的数据添加额外的字符,而是阻止具有特殊含义的字符破坏您的 SQL。

于 2012-05-03T14:35:39.510 回答
0

把逃跑想象成生日礼物上的包装纸。

您对数据进行转义,以便数据中的任何特殊字符在传输过程中失去其特殊含义。一旦它们“进入”目标系统(html 页面、数据库记录等),就不再需要转义,因为它们可能影响进程的地方现在已经结束。

包装好的礼物也一样——一旦收到礼物,你就不再需要包装纸了,所以它被移除了。

于 2012-05-03T14:37:23.360 回答
0

它运行良好。

删除mysql_real_escape_string将阻止数据被插入。

于 2012-05-03T14:38:10.223 回答
0
$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();

(我省略了连接错误检查)

于 2012-05-03T14:42:52.207 回答