【发布时间】:2013-08-10 16:07:19
【问题描述】:
我认为在将 HTML 表单输入到 mySQL 数据库之前“清理”传入数据的正确方法是在 PHP 脚本中对其使用real_escape_string,如下所示: p>
$newsStoryHeadline = $_POST['newsStoryHeadline'];
$newsStoryHeadline = $mysqli->real_escape_string($newsStoryHeadline);
$storyDate = $_POST['storyDate'];
$storyDate = $mysqli->real_escape_string($storyDate);
$storySource = $_POST['storySource'];
$storySource = $mysqli->real_escape_string($storySource);
// etc.
一旦完成,您可以像这样将数据插入数据库:
$mysqli->query("INSERT INTO NewsStoriesTable (Headline, Date, DateAdded, Source, StoryCopy) VALUES ('".$newsStoryHeadline."', '".$storyDate."', '".$dateAdded."', '".$storySource."', '".$storyText."')");
所以我认为这样做可以清除您提交的文本中可能出现的所有不可见的“垃圾”字符。
但是,我只是将从网页复制的一些文本粘贴到我的 HTML 表单中,单击“提交”——它运行上述脚本并将该文本插入到我的数据库中——但是当我阅读该文本时 返回 从数据库中,我发现这段文本确实 中仍然有垃圾字符,例如–。
当然,这些垃圾字符导致我编写的 PHP 脚本检索数据库中的信息崩溃。
那我做错了什么?
是使用real_escape_string 不是到这里的方式吗?还是我应该将它与其他东西结合使用?
或者,在从 mySQL 数据库读取数据时,我应该做些什么(比如转义)?
(我应该提一下,我是一名 Objective-C 开发人员,而不是 PHP/mySQL 开发人员,但不幸的是,我被赋予了这项任务来做一些数据库工作——因此我的问题是……) 谢谢!
【问题讨论】:
-
一方面,您应该使用参数化查询而不是
real_escape_string。您是否为页面正确设置了字符集? -
嗯,不太清楚您所说的“您是否正确设置了字符集”是什么意思——该语句会是什么样子? (我应该提一下,我是一名 Objective-C 开发人员,而不是 PHP/mySQL 开发人员,但不幸的是,我被赋予了这个任务来做一些 DB 的东西......)
-
你从哪里得到“清理”“垃圾字符”的想法?
-
我知道它们是“垃圾”,因为它们在原始文本中不可见 - 但在检索时突然出现。这就是我对“垃圾”的看法 :-) 我假设它们正在格式化类型字符?无论哪种方式,它们都会导致我的 PHP 脚本崩溃,所以无论我们是否称它们为“垃圾”,我只需要了解如何处理它们 :-) 那么,有什么想法吗?
-
@sirab333
<meta charset="utf-8">在您的<head>中。
标签: php mysql database mysqli mysql-real-escape-string