【问题标题】:how to escape a string in php? [duplicate]如何在php中转义一个字符串? [复制]
【发布时间】:2012-08-02 11:28:33
【问题描述】:

可能重复:
How to properly escape a string via PHP and mysql

我正在尝试填充MySQL 数据库,为此我正在解析数据文件并运行INSERT INTO ... 查询。 表parsonspredictions_R 的结构如下:

+-------------+---------+------+-----+---------+----------------+
| 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 值与 ' 一起,那么我该如何转义我的字符串以忽略或从字符串中删除那些 '

例子:

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

结果:

无效查询:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1-b 行的 '', 'Emdin', 0.165714, 0.0019 )' 附近使用正确的语法

【问题讨论】:

  • 你使用的是什么数据库库?
  • @Cups 不是什么 database,而是访问那个数据库的 library。仅核心 PHP 就有 3 个:旧的 mysql、新的 mysqli 和 PDO。
  • 参见string literals in MySQL,其中谈到了转义。 ('form' 应该是首选,因为 "form" 违反了 ANSI。)但是,如果从 PHP 调用(而不仅仅是如图所示的最终查询),请使用适当的技术(即占位符)来防止SQL injection attacks.
  • @Pekka 啊 - 我的错误对不起小伙子....

标签: php mysql


【解决方案1】:

如果您正在使用 mysqli,请尝试使用此功能 mysqli_real_escape_string,如果您不使用 mysqli,请在 Google 上简单搜索: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
);

【讨论】:

  • @philippe 然后指定您使用的数据库库
  • @philippe - mysqlimysql 原生库的 PHP 更新 版本。它 MySQL。
【解决方案2】:

你可以通过输入来转义'-字符

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()。它会转义所有可疑字符,例如'-character。

【讨论】:

  • +1 因为这是正确的,不值得反对。但是,由于该问题被标记为 PHP,因此建议考虑如何插入“动态数据”。
  • @Ianka:数据来自一个文件......正在使用正则表达式解析,所以我无法手动转义。
  • @philippe 您可以编辑您的正则表达式(或制作另一个)以在文本变量中添加 ''(2 个引号)而不是 '(一个引号)
  • 取这个值:Spiro[cyclohexane-1,2'-[2H]cyclopentapyrimidin]-4'(3'H)-one, 1',5',6',7'-tetrahydro- (9CI)_48_3:我正在使用以下正则表达式:
  • $regex = '/(\w*)\s*-\s*([\d\.]+)\s*\(p\s*=\s*([\d\.]+)\)/';
猜你喜欢
  • 2013-02-12
  • 2014-03-07
  • 2016-06-05
  • 2012-03-05
  • 2017-12-06
  • 1970-01-01
  • 2015-09-22
  • 2013-04-14
  • 2022-11-30
相关资源
最近更新 更多