mysql_real_escape_string被忽略了

时间:2012-05-03 14:32:42

标签: php mysql

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

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

我正在使用带有PHP的MySQL 5.5并测试它我创建了一个简单的表单 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和代码格式化似乎与我访问过的大多数论坛都不一样,而你无法预览,所以我希望结果没问题。

提前向任何提供帮助的人提供帮助。 干杯Al。

5 个答案:

答案 0 :(得分:3)

这是按设计的,您不应该在表格中看到任何转义输入。它只是用于插入。使用mysql_real_escape_string,您的查询就像

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

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

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

答案 1 :(得分:2)

  

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

这是应该发生的事情。

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

答案 2 :(得分:0)

想想在生日礼物上逃避相当于包装纸。

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

与包装礼物相同 - 收到礼物后,您不再需要包装纸,因此将其移除。

答案 3 :(得分:0)

它运作良好。

删除mysql_real_escape_string会阻止插入数据。

答案 4 :(得分: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();

(我遗漏了连接错误检查)