【问题标题】:Find if string is MySQL function in PHP查找字符串是否为 PHP 中的 MySQL 函数
【发布时间】:2012-07-24 18:53:31
【问题描述】:

我有一个函数,它接受一个数组并根据数组的键/值对创建一个 SQL 语句。例如:

 name=>SomeKittens

会变成

(`name`) VALUES ('SomeKittens')

唯一的问题是当我使用 MySQL 字符串函数时,例如 NOW()

creation_date=>NOW()

变成

(`creation_date`) VALUES ('NOW()')

请注意,NOW() 已转义。有什么方法可以检测该值是否是 MySQL 字符串函数? (当然除了$value === "NOW()"

我正在使用 Joomla DBO,但也对 PDO/MySQLi 解决方案持开放态度。

(relevant chat discussion)

【问题讨论】:

  • NOW() 没有转义,但它是一个文字字符串。
  • 你如何区分NOW() 是一个函数,NOW() 是一个硬编码的 5 字符文字字符串?您可能需要在键/值对中手动提供更多元数据以指示如何解释值,例如 name=>STRING:SomeKittenscreation_date=>FUNC:NOW()

标签: php mysql joomla joomla-dbo


【解决方案1】:

如果您允许带有参数的函数,我认为您将无法保护您的数据库免受 SQL 注入。
如果您只允许没有参数的函数(例如 NOW()),您不妨硬编码一个列表。

【讨论】:

    【解决方案2】:

    您可能只想定义一个像 MYSQL_NOW 这样的常量,在创建查询时您知道要转换为 NOW() 函数调用而不是 'NOW()' 字符串。

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多