当我用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>发布于 2012-04-25 16:12:12
您的问题与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
发布于 2012-04-25 15:24:41
如果您真的只是在数据库中使用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-25 15:24:23
尝试使用PDO中的预准备语句
http://php.net/manual/en/pdo.prepared-statements.php
准备好的语句的参数不需要加引号;驱动程序会自动处理这一点。如果应用程序以独占方式使用已准备好的语句,则开发人员可以确保不会发生SQL注入(但是,如果查询的其他部分是用未转义的输入构建的,SQL注入仍然是可能的)。
https://stackoverflow.com/questions/10311051
复制相似问题