首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP/MySQL中转义单引号插入不起作用

问在PHP/MySQL中转义单引号插入不起作用
EN

Stack Overflow用户
提问于 2012-07-03 00:04:08
回答 4查看 4.9K关注 0票数 3

我正在尝试使用JavaScript/Ajax和PHP的组合将字符串插入到MySQL表中。在使用Ajax将所需的(JavaScript)字符串传递给PHP脚本之后,我尝试使用PHP将其插入到表中。

PHP脚本正在工作,但是只要遇到单引号('),插入就会在该点停止。我尝试过在不同的组合中使用mysql_real_escape_string()、addslashes()、htmlentities()和str_replace(),尝试使用魔术引号打开和关闭,无论如何,单引号都不能处理。我想要么保留它们,要么正确地转义它们,但对我来说什么都不起作用-字符串本身来自Tweet,所以我想知道是不是编码冲突导致了这一点?任何关于如何克服这个问题的建议都将不胜感激。

例如,为了更好地说明,如果我将此字符串传递给PHP脚本:

向我保证你不会投票

然后,使用上面的任何方法清理字符串并将其插入到MySQL表中后,在MySQL表中,它将始终如下所示:

向我保证你赢了

这是我的php代码:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
$.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中检索时,将其切换回单引号。

EN

回答 4

Stack Overflow用户

发布于 2014-12-10 20:37:30

在mysql中插入带单引号(')或双引号(")的字符串

只需在插入时使用addslashes();,在获取数据时使用stripslashes();。

代码语言:javascript
复制
$str = "Hello Friend's.. Hows you all"s.";
// Outputs: Hello Friend\'s..Hows you all\"s.
echo addslashes($str);

stripslashes使用addslashes()引用的不带引号的字符串。返回去掉反斜杠的字符串。(\'将变为',依此类推。)将双反斜杠(\\)转换为单反斜杠(\)。

代码语言:javascript
复制
$str = "Hello Friend\'s.. Hows you all"s."; // Outputs: Hello Friend's.. Hows you all"s.
echo stripslashes($str);

现在我们来谈正题了。如果我们用单引号或双引号将字符串插入数据库,如下所示:

代码语言:javascript
复制
$str = “Hello Friend's.. Hows you all"s.”;
$query = “INSERT INTO tbl (description) VALUES (‘$str’)”;

这将发生错误,但如果我们使用如下所示的addslashes($str)函数,然后插入到数据库中,则不会发生错误。

代码语言:javascript
复制
$str = “Hello Friend's.. Hows you all"s.”;
$desc_str = addslashes($str);
$query = “INSERT INTO tbl (description) VALUES (‘$desc_str’)”;

类似地,我们可以使用stripslashes($str)打印表字段值,如下所示:

代码语言:javascript
复制
echo stripslashes($str);
票数 3
EN

Stack Overflow用户

发布于 2012-07-03 09:36:46

如果将mysqli或PDO与预准备语句一起使用,可以很容易地避免整个转义过程。无论如何,mysql_*函数都已弃用,因此这将是切换的绝佳机会。

您的代码将类似于(PDO,使用您的代码):

代码语言:javascript
复制
$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
票数 2
EN

Stack Overflow用户

发布于 2012-07-03 00:15:43

替换:

代码语言:javascript
复制
$link = mysql_query($query);
if (!$link) {
  echo "3";
  die($result);
}

通过以下方式:

代码语言:javascript
复制
mysql_query($query);
if(mysql_errno() != 0)
  die(mysql_error());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11297223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档