2012-07-24 42 views
4

我有一个函数,它接受一个数组并根据数组的键/值对创建一条SQL语句。例如:查找字符串是否为PHP中的MySQL函数

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

+0

NOW()不会被转义,但它是一个文字字符串。 – PeeHaa 2012-07-24 18:55:03

+4

你如何区分'NOW()'是一个函数,'NOW()'是一个硬编码的5字符文字串?您可能需要在键/值对中手动提供更多元数据以指示如何解释该值,例如'name => STRING:SomeKittens'和'creation_date => FUNC:NOW()' – mellamokb 2012-07-24 18:55:22

回答

4

如果你允许带参数的函数,我认为你不能保护你的数据库免受SQL注入。
如果你只允许不带参数的函数(比如NOW()),你也可以硬编码一个列表。

1

你可能只是想定义就像MYSQL_NOW是创建查询时,你知道转换为NOW()函数调用,而不是“NOW()”字符串常量。