我正在尝试使用JavaScript/Ajax和PHP的组合将字符串插入到MySQL表中。在使用Ajax将所需的(JavaScript)字符串传递给PHP脚本之后,我尝试使用PHP将其插入到表中。
PHP脚本正在工作,但是只要遇到单引号('),插入就会在该点停止。我尝试过在不同的组合中使用mysql_real_escape_string()、addslashes()、htmlentities()和str_replace(),尝试使用魔术引号打开和关闭,无论如何,单引号都不能处理。我想要么保留它们,要么正确地转义它们,但对我来说什么都不起作用-字符串本身来自Tweet,所以我想知道是不是编码冲突导致了这一点?任何关于如何克服这个问题的建议都将不胜感激。
例如,为了更好地说明,如果我将此字符串传递给PHP脚本:
向我保证你不会投票
然后,使用上面的任何方法清理字符串并将其插入到MySQL表中后,在MySQL表中,它将始终如下所示:
向我保证你赢了
这是我的php代码:
include("dbconnect.php"); //connect to DB
$tweet = mysql_real_escape_string($_POST['tweet']); //escape the string
if($tweet != '') { //check it's not empty
$query = "insert into Tory (Content) values('$tweet')"; //insert statement
$link = mysql_query($query);
if (!$link) {
echo "3";
die($result);
}
echo "<p>".$tweet."</p>"; //for Ajax callback
}以下是Javascript/Ajax代码:
$.ajax({
type: 'POST',
url: 'buildTable.php', //previous php code
data: "tweet=" + content, //content is the tweet string as javascript var
success: function(thetweet) {
$(document.body).append(thetweet);
}
});编辑:感谢您提供的所有评论和建议。我使用的一个临时解决方案是,在将字符串传递给PHP脚本之前,在客户端将单引号的所有实例替换为反斜杠。然后,当在PHP或JavaScript中检索时,将其切换回单引号。
发布于 2014-12-10 20:37:30
在mysql中插入带单引号(')或双引号(")的字符串
只需在插入时使用addslashes();,在获取数据时使用stripslashes();。
$str = "Hello Friend's.. Hows you all"s.";
// Outputs: Hello Friend\'s..Hows you all\"s.
echo addslashes($str);stripslashes使用addslashes()引用的不带引号的字符串。返回去掉反斜杠的字符串。(\'将变为',依此类推。)将双反斜杠(\\)转换为单反斜杠(\)。
$str = "Hello Friend\'s.. Hows you all"s."; // Outputs: Hello Friend's.. Hows you all"s.
echo stripslashes($str);现在我们来谈正题了。如果我们用单引号或双引号将字符串插入数据库,如下所示:
$str = “Hello Friend's.. Hows you all"s.”;
$query = “INSERT INTO tbl (description) VALUES (‘$str’)”;这将发生错误,但如果我们使用如下所示的addslashes($str)函数,然后插入到数据库中,则不会发生错误。
$str = “Hello Friend's.. Hows you all"s.”;
$desc_str = addslashes($str);
$query = “INSERT INTO tbl (description) VALUES (‘$desc_str’)”;类似地,我们可以使用stripslashes($str)打印表字段值,如下所示:
echo stripslashes($str);发布于 2012-07-03 09:36:46
如果将mysqli或PDO与预准备语句一起使用,可以很容易地避免整个转义过程。无论如何,mysql_*函数都已弃用,因此这将是切换的绝佳机会。
您的代码将类似于(PDO,使用您的代码):
$query = "insert into Tory (Content) values (:tweet)";
$stmt = $db->prepare($sql); // $db being your PDO object
$stmt->execute(array(':tweet' => $_POST['tweet'])); // assuming you are not verifying the tweet somewhere else发布于 2012-07-03 00:15:43
替换:
$link = mysql_query($query);
if (!$link) {
echo "3";
die($result);
}通过以下方式:
mysql_query($query);
if(mysql_errno() != 0)
die(mysql_error());https://stackoverflow.com/questions/11297223
复制相似问题