当我在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>
答案 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注入)。