【问题标题】:How to insert special characters into a database?如何将特殊字符插入数据库?
【发布时间】:2011-02-04 18:12:24
【问题描述】:

谁能告诉我如何在 MySQL 数据库中插入特殊字符?我制作了一个 PHP 脚本,旨在将一些单词插入数据库,但如果单词包含 ' 则不会插入。

我可以在使用 PHPmyAdmin 时很好地插入特殊字符,但在通过 PHP 插入它们时它不起作用。会不会是 PHP 正在将特殊字符更改为其他字符?如果是这样,有没有办法让它们正确插入?

【问题讨论】:

  • 你可以粘贴处理和插入特定变量的代码部分吗?

标签: php mysql database insert special-characters


【解决方案1】:
$insert_data = mysql_real_escape_string($input_data);

假设您将数据存储为$input_data

【讨论】:

  • 这将教会我不要写一个简单的单行示例。
  • 我知道!当我看到你击败我时,我几乎删除了我的答案。
  • 从 PHP 5.5 起,该函数将被弃用,您应该改用 mysqli_real_escape_string
【解决方案2】:

你在逃跑吗?试试 mysql_real_escape_string() 函数,它会处理特殊字符。

【讨论】:

  • +1 击败我。我发现当我使用反引号来格式化我的内联代码时,我会获得更多的选票,如果这有帮助的话。
  • 同情投票,因为您首先回答但没有举例说明。好像这是一个使用 PHP.net 无法更快回答的问题
  • @dscher 谢谢!如果像你这样的人多一点就好了! ;)
  • @zaf 两年后,我想道歉。 :P 当时我很愚蠢,对 PHP 完全是个菜鸟。当我看到 Anthony 的代码示例答案时,我立即将其作为答案进行了检查,甚至没有看你的答案,因为它需要的工作更少。我现在知道得更多了,所以再次抱歉。 :)
  • @JoeyMorani 没关系,感谢您的留言。你不再是菜鸟了。
【解决方案3】:

您很可能转义了 SQL 字符串,类似于:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!'

您需要转义引号,如下所示:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!'

mysql_real_escape_string() 为您处理。

【讨论】:

    【解决方案4】:

    使用 mysql_real_escape_string

    那么mysql_real_escape_string有什么作用呢?

    此 PHP 库函数在以下字符前添加反斜杠:\n、\r、\、\x00、\x1a、' 和“。重要的部分是单引号和双引号被转义,因为这些字符最有可能打开漏洞。

    请了解有关 sql_injection 的信息。你可以使用这个link 作为开始

    【讨论】:

    • 又一篇愚蠢的文章,作者一无所知。关于删除表的同样古老的故事(很好吓唬新手,是的,但从来没有工作过),同样的愚蠢查询函数,用于处理魔术引号。像往常一样,对非字符串值只字不提。和 $badWords 的最大保护
    • 好吧,这不是最好的文章,但它应该熟悉基础知识(我从快速谷歌搜索中挖掘出来)如果你有更好的文章,你可以给一个链接。
    • 好吧,我写了一些,它是SO答案的形式。 stackoverflow.com/questions/2589820/…
    【解决方案5】:

    您很可能将它们直接粘贴到查询中。相反,您应该使用适当的函数“转义”它们 - mysql_real_escape_stringmysqli_real_escape_stringPDO::quote,具体取决于您使用的扩展名。

    【讨论】:

      【解决方案6】:

      请注意,正如其他人指出的那样,mysql_real_escape_string() 将解决问题(addslashes 也将解决),但是出于安全原因,您应该始终使用 mysql_real_escape_string() - 请考虑:

      SELECT * FROM valid_users WHERE username='$user' AND password='$password'
      

      如果浏览器发送怎么办

      user="admin' OR (user=''"
      password="') AND ''='"
      

      查询变为:

      SELECT * FROM valid_users 
      WHERE username='admin' OR (user='' AND password='') AND ''=''
      

      即安全检查被完全绕过。

      C.

      【讨论】:

        【解决方案7】:

        可能“mysql_real_escape_string()”对你有用

        【讨论】:

          【解决方案8】:
          $var = mysql_real_escape_string("data & the base");
          $result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like  "%' .$var.'%"');
          

          【讨论】:

          • 这是一个处理 php mysql 中特殊字符的工作示例。您可以将 & 替换为 ' 它将正常工作
          【解决方案9】:

          使用这个:htmlentities($_POST['field']);

          够了。这对于特殊字符:

          用于CI htmlentities($this->input->post('control_name'));

          【讨论】:

            【解决方案10】:

            例如:
            $parent_category_name = 男装
            这里考虑 SQL 查询

            $sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 
            

            错误:

            Static analysis:
            
            1 errors were found during analysis.
            
            Ending quote ' was expected. (near "" at position 198)
            SQL query: Documentation
            
            SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25
            
            MySQL said: Documentation
            
            #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1
            

            尝试实施:

            $this->db->escape($parent_category_name)
            

            上述方法适用于 OpenCart 框架。找到您的框架并实施或 mysql_real_escape_string() 在核心 PHP 中

            这将成为男士服装,即在我的情况下

            $sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 
            

            因此,您将通过实现 escape() as 来清楚地了解查询

            SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0
            

            【讨论】:

              【解决方案11】:

              htmlspecialchars 函数是最好的解决方案。今天我正在寻找如何插入带有特殊字符的字符串,谷歌抛出了这么多 Stackoverflow 列表。他们都没有为我提供解决方案。我在 w3schools 页面找到了它。是的,我可以像这样使用这个函数来解决我的问题:

              $abc = $POST['xyz'];
              
              $abc = htmlspecialchars($abc);
              

              【讨论】:

                【解决方案12】:

                我把它放在这里以供将来参考。浪费了 20 分钟后,我找到了将特殊字符放入数据库的解决方案。我们不必像那样使用mysql_real_escape_string($holdvalue)。我们必须这样做。 $db->real_escape_string($holdvalue)。其中$db 是数据库连接详细信息。 $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);.

                【讨论】:

                  猜你喜欢
                  • 2021-03-27
                  • 2012-03-24
                  • 2020-08-30
                  • 2018-02-26
                  • 1970-01-01
                  • 2016-02-18
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多