1

当我在 PHP 中保存这个字符串时:

John: "Yes you can".

在我的数据库中保存为:

John: \

我怎样才能用“(显然不删除”)保存这些字符串。这是我的 php 代码:

$titlepost= mysql_real_escape_string($_POST['title']);
$query = "INSERT INTO `titles` (`title`) VALUES ( '".$titlepost."')";
$res = mysql_query($query) or die("Failed".mysql_error() );

echo $titlepost;

output: 
John: \\

形式:

$title = mysql_real_escape_string($_GET['title']);

<form method="post" action="title.php?done=yes" enctype="multipart/form-data">
<input type="text" size="25" name="title" <?php echo "value=\"".$title."\""; ?> > 
<input id="starit" name="submit" value="titleit" type="submit" />
</form>
4

3 回答 3

2

您的问题与 PHP 或 MySQL 无关。

它就像非常简单的 HTML 语法规则一样愚蠢。很明显,代码

<input value="John: "YES you can>

将仅显示引用的“John:”部分。为了使其正确,必须在值中编码特殊符号

$titlepost = htmlspecialchars($titlepost,ENT_QUOTES);
?>
<input type="text" name="title" value="<?=$titlepost?>">

As for the slashes - it is silly excessive quoting issue. just quote your strings only once and make sure you have magic_quotes_gpc turned off

于 2012-04-25T08:12:11.547 回答
0

如果您真的只是进入John: \数据库,听起来您正在使用魔术引号(这会导致您在数据库中插入反斜杠,因为您正在转义转义的字符串)并且列大小太小(这就是为什么反斜杠之后的任何内容不见了)。

试试这个:

if(get_magic_quotes_gpc()) $_POST = array_map('stripslashes', $_POST);
$titlepost = mysql_real_escape_string($_POST['title']);

这确保它$_POST不包含任何使用mysql_real_escape_string.

于 2012-04-25T07:24:41.360 回答
-1

尝试使用 PDO 中的准备好的语句

http://php.net/manual/en/pdo.prepared-statements.php

准备好的语句的参数不需要引用;驱动程序会自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确定不会发生 SQL 注入(但是,如果查询的其他部分是使用非转义输入构建的,则 SQL 注入仍然是可能的)。

于 2012-04-25T07:24:23.287 回答