如何在PHP中保存此字符串?

时间:2012-04-25 07:17:56

标签: php mysql

当我在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: \\

FORM:

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

3 个答案:

答案 0 :(得分:2)

您的问题与PHP或MysQL无关。

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

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

仅显示引用的“John:”部分。 为了使其正确,必须在值

中编码特殊符号
$titlepost = htmlspecialchars($titlepost,ENT_QUOTES);
?>
<input type="text" name="title" value="<?=$titlepost?>">

至于斜线 - 这是一个愚蠢的过度引用问题。只需引用您的字符串一次,并确保已关闭magic_quotes_gpc

答案 1 :(得分:0)

如果您真的只是在数据库中获得John: \,则听起来您正在使用魔术引号(这会导致您在转义转义字符串时在数据库中插入反斜杠) 列的大小太小(这就是为什么在反斜杠丢失之后的原因)。

试试这个:

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

这可确保$_POST不包含任何使用mysql_real_escape_string后会破坏的魔术引号转义数据。

答案 2 :(得分:-1)

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

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

  

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