如何在PHP中转义字符串?

问题描述:

可能重复:
How to properly escape a string via PHP and mysql如何在PHP中转义字符串?

我试图填充MySQL数据库,这样做我解析数据文件和运行INSERT INTO ...查询。

+-------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-------------+---------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| drug_a  | blob | NO |  | NULL |    | 
| drug_b  | blob | NO |  | NULL |    | 
| correlation | float | NO |  | NULL |    | 
| p_value  | float | NO |  | NULL |    | 
+-------------+---------+------+-----+---------+----------------+ 

然而,也有一些drug_x值沿着有',所以我怎么能逃过我的字符串在其他忽略或删除从字符串的':作为 表parsonspredictions_R的结构?

实例:

INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    '2'-Hydroxyflavanone_28_0', 
    'Emodin', 
    0.165714, 
    0.0019 
); 

结果:

查询无效:您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的“正确的语法手册”,“大黄素”,0.165714,0.0019)”在行1-B

+0

你正在使用什么数据库库? – 2012-08-04 21:56:06

+0

有一个mysql标记 – Cups 2012-08-04 21:57:47

+2

@Cups不是什么*数据库*,而是什么*库*来访问该数据库。单独的核心PHP有3个:旧的mysql,较新的mysqli和PDO。 – 2012-08-04 21:58:30

你可以逃脱“字符数限制通过键入

INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    '2''-Hydroxyflavanone_28_0', 
    'Emodin', 
    0.165714, 
    0.0019 
); 

或者你可以把你的字符串在MySQL查询中 “” -quotes。

编辑: 为了让你的文件准备好正则表达式,你可以在使用正则表达式之前在文本上使用mysql_real_escape_string()。它会逃离所有可疑的人物,如'人物。

+0

+1,因为这是正确的,不值得赞赏。但是,由于该问题被标记为PHP,因此可以考虑如何插入“动态数据”。 – 2012-08-04 22:06:31

+0

@Ianka:数据来自一个正在使用正则表达式进行分析的文件,所以我不能手动转义它。 – cybertextron 2012-08-04 22:08:15

+0

@philippe你可以编辑你的正则表达式(或者创建另一个)在文本变量中添加''(2个引号)而不是'(单引号) – user15 2012-08-04 22:11:37

尝试使用此功能mysqli_real_escape_string如果您使用的mysqli ,如果你不使用mysqli,那么简单的谷歌搜索:escapes special characters in a string PHP会指向你的解决方案。

如果你想避免这个问题完全,你应该尝试使用PDO class和自己拿上准备好的语句。

假设你正在使用的mysqli

$drug_a = mysqli_real_escape_string($drug_a); 
$drug_b = mysqli_real_escape_string($drug_b); 


INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    $drug_a, 
    $drug_b, 
    0.165714, 
    0.0019 
); 
+0

'MySQL'何塞维加! – cybertextron 2012-08-04 21:58:24

+0

@philippe然后*指定您正在使用的数据库库* – 2012-08-04 21:59:01

+3

@philippe - 'mysqli'是'mysql'本机库的PHP *更新*版本。它*是* MySQL。 – 2012-08-04 21:59:22