首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中,如何在插入到MySQL表之前转义字符串中的单引号?

在PHP中,如何在插入到MySQL表之前转义字符串中的单引号?
EN

Stack Overflow用户
提问于 2011-10-14 19:11:25
回答 2查看 1.1K关注 0票数 0

我有很多文本要使用PHP插入到MySQL表中。文本的一部分如下例所示:

代码语言:javascript
复制
Yes, this is 'great'!

要将其填充到SQL语句中,我需要转义'

我正在使用ereg-replace $text=mb_ereg_replace("'","\\'", $text);来完成以下工作:

代码语言:javascript
复制
$sql="insert into mytable (msg) values ('".$text."')";

现在我发现还有另一种文本样式,我必须将类似这样的内容保存到MySQL:

代码语言:javascript
复制
As you can see the \' world\' is a "disc"!

所以我尝试像这样添加更多的mb_ereg_replace:

代码语言:javascript
复制
$text=mb_ereg_replace("'","\\'", $text);
$text=mb_ereg_replace("\\","\\\\", $text);

但是这不起作用,我只是得到了错误消息:PHP Warning: mb_ereg_replace(): mbregex compile err: end pattern at escape in [...]

这是什么原因造成的?我可能弄错了,但是找不到!

谢谢你的任何帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-14 19:13:37

使用mysql_real_escape_string对字符串进行转义。

代码语言:javascript
复制
$text = mysql_real_escape_string($text);

或者更好,使用PDO和参数化查询。

票数 2
EN

Stack Overflow用户

发布于 2015-04-29 19:15:14

有一种更好的方法,你再也不需要担心退出你的字符串了。在mysqliPDO中使用预准备语句将使大型查询(具有多行的查询)运行得更快,它们是安全的,您不必担心(大多数类型的) SQL注入,而且它们很容易学习。这些字符串将按原样被接受到数据库中,而不会有破坏代码的风险。

下面是一个使用mysqli的示例:

代码语言:javascript
复制
$conn = new mysqli($servername, $username, $password, $dbname);

$stmt = $conn->prepare("INSERT INTO table (columnname) VALUES (?)");
$stmt->bind_param("s", $text);
$stmt->execute();
$stmt->close();

基本上,通过在它进入之前绑定参数,它只接受您创建的任何字符串,而不需要转义任何东西。

下面是使用PDO的相同情况。这在本质上做了相同的事情,但优点是既可以处理多种不同的数据库类型(例如Oracle或PostgreSQL),又可以根据关联的类进行一些巧妙的修改。

代码语言:javascript
复制
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $conn->prepare("INSERT INTO table (columname)
        VALUES (:text)");
        $stmt->bindParam(':text', $text);
        $stmt->execute();
    catch(PDOException $e)
        {
        echo "Oops, didn't work: " . $e->getMessage();
        }
    $conn = null;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7766773

复制
相关文章

相似问题

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