【问题标题】:Issue escaping single quote on mssql 2008 from php codeigniter问题从 php codeigniter 转义 mssql 2008 上的单引号
【发布时间】:2015-07-23 15:54:08
【问题描述】:

我正在向数据库中进行插入,其中我试图转义的列之一是用户可能键入的单引号。例如it's, 我正在使用 codeigniter 框架并执行以下操作来逃避我的专栏:

$test=$this->db->escape($test);

但我在提交时收到 SQL-Server 错误。例如,如果我输入it's,它会尝试这样做

INSERT INTO table (test) VALUES(''it''s'')

应该是什么时候

INSERT INTO table (test) VALUES('it''s')

为什么要插入额外的单引号?

【问题讨论】:

  • 会不会还是最下面的无效?
  • 是的@LiamSorsby 都是无效的,应该做的是这个'it\'s'\'
  • 当我在实际的 sql server 上运行 'it''s' 时,当我使用 'it\'s' 运行它时,它插入正常,它给了我一个错误
  • @ArtisiticPhoenix 是的,我知道。我只是说上面的答案说它应该是最底层的。这也是无效的。
  • @LiamSorsby - 哦,它被格式化为一个问题。对不起

标签: php sql-server sql-server-2008 codeigniter


【解决方案1】:

当您应该只转义您正在插入的字符串时,您正在转义整个 SQL 语句。例如,假设您当前有以下代码。

$test = "INSERT INTO table (test) VALUES ('" . $value . "');";

你应该把它改成

$test = "INSERT INTO table (test) VALUES ('" . $this->db->escape($value) . "');";

编辑

正如 Liam 所指出的,由于您使用的是 Codeigniter,因此您可能还需要考虑使用它们提供的查询绑定。有关详细信息,请参阅此 URL:https://ellislab.com/codeigniter/user-guide/database/queries.html

【讨论】:

  • 不错。我会努力做到这一点
  • 太棒了。让我知道它是否有效。我远不是 PHP 专家,所以可能有更有效的方法来做到这一点:)
  • 它有效,谢谢 :) 这很有意义。当我能够接受时,我会接受你的回答
  • @ShawnLehner 不完全确定,但这不是更好的方法。 stackoverflow.com/questions/14156421/…
  • 查询绑定始终是任何语言的首选方法,但不是必需的,只要您手动正确转义变量即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多