如何在MySQL数据库中保存引号

时间:2011-07-29 00:09:10

标签: php mysql utf-8 pdo quotes

每当我在PHP表单域中添加单引号(')或双引号(“)时,它将作为" / '保存在我的MySQL数据库中。如何保存'我的DB中真正的“引号”?

我尝试通过PDO建立安全的Mysql连接来防止这种情况,但它似乎无法正常工作。

所以这是我的代码的重要部分:

    $insert_hello = filter_var($_POST['hello'], FILTER_SANITIZE_STRING);
    $dbh->query("SET NAMES 'utf8'");
    $stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)");
    $stmt->bindParam(':hello', $insert_hello, PDO::PARAM_STR);      
    $stmt->execute();

一些背景信息:

服务器在PHP v5.2.12-0上运行。

DBStorage引擎是InnoDB,其客户端,连接,结果和系统字符集设置为utf8。

DB字段的排序规则设置为utf8_unicode_ci。

通过.htaccess禁用魔术引号。

提前致谢!

亲切的问候, Jroen

4 个答案:

答案 0 :(得分:0)

最好的想法是保持原样并在阅读时解码html。

答案 1 :(得分:0)

您可以使用php函数$decoded_insert_hello = html_entity_decode($insert_hello, ENT_QUOTES)来执行此操作。

http://www.php.net/manual/en/function.html-entity-decode.php

答案 2 :(得分:0)

好的,只是为了正确回答:

问题是由将filter_var()转换为HTML实体的$dbh->query("SET NAMES 'utf8'"); $stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)"); $stmt->bindParam(':hello', $_POST['hello'], PDO::PARAM_STR); $stmt->execute(); 引起的。因为PDO会为您执行此操作,因此无需手动清理数据。

你可以写这样的东西,应该可以正常工作:

{{1}}

答案 3 :(得分:0)

这是我的数据作为 API 响应的样子,我想将其存储在 MYSQL 数据库中。它包含引号、HTML 代码等。

示例:-

{

rewardName: "Cabela's eGiftCard $25.00",

shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at&nbsp;<a href="http://adidas.com/">adidas.com</a>.</p>

terms: '<p>adidas Gift Cards may be redeemed for merchandise on&nbsp;<a href="http://adidas.com/">adidas.com</a>&nbsp;and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'

}

解决方案

CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),  
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

插入时,接着JSON.stringify()

    let brandDetails= {
    rewardName: JSON.stringify(obj.rewardName),  
    shortDescription: JSON.stringify(obj.shortDescription),
    term: JSON.stringify(obj.term),
     }

上面是JSON对象,下面是向MySQL插入数据的SQL查询。

let query = `INSERT INTO brand (reward_name, short_description, terms) 
VALUES (${brandDetails.rewardName}, 
(${brandDetails.shortDescription}, ${brandDetails.terms})`;

它的工作....

enter image description here

如果没有任何效果,试试这个:

var res = str.replace(/'/g, "\\'");
var res = res.replace(/"/g, "\\\"");

它将 \ 转义字符添加到所有出现的 ' 和 "

不确定它是否是解决问题的正确/专业方法

我猜它会起作用,但在实际内容中,每个单引号和双引号都将替换为 \ 字符