检查有效的 SQL 列名称
如何在 php 中检查字符串是否是 sql 语句的有效兼容列名? 只是一个字符串匹配。
How would you check in php that a string is a valid compatible column name for a sql statement?
just a string match.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
最终,每个字符串一旦用双引号括起来,就是一个有效的列名(MySQL 可能不遵守该规则,具体取决于配置。在默认安装中,它不使用双引号作为标识符引号)。
但是,如果您想要跨平台(正如不同的 DBMS 标签所建议的那样),您应该检查最小公分母。
PostgreSQL 手册对此有一个很好的定义:
因此,您应该使用正则表达式检查以下内容:
因此,像下面这样的正则表达式应该涵盖这一点:
^[a-zA-Z_][a-zA-Z0-9_]*$
由于 SQL 不区分大小写(除非使用双引号)使用)允许使用大写和小写字母。
Ultimately every string is a valid column name once it is enclosed in double quotes (MySQL might not obey to that rule depending on the configuration. It does not use double quotes as identifier quotes in the default installation).
However if you want to be cross platform (as the different DBMS tags suggest), you should check for the least common denominator.
The PostgreSQL manual has a nice definition of this:
So you should check the following with a regular expression:
So a regular expression like the following should cover this:
^[a-zA-Z_][a-zA-Z0-9_]*$
As SQL is not case sensitive (unless double quotes are used) upper and lower case letters are allowed.
您可以使用 MySQL 查询,如下所示从特定表中获取字段:
然后使用一些简单的 PHP:
You can use the MySQL query as follows to get the fields from a particular table:
and then some simple PHP:
使用
使用显示列或描述查询。
然后从结果中进行验证。
Use
Either use show columns or describe query.
and than validate from the result.
如果我有同样的问题,我会在特定的数据库文档中搜索特定的字符列表,然后以正则表达式的形式实现它。
但我永远不会遇到这样的问题,因为基本的拉丁字符、数字和下划线足以命名我使用的任何字段。所以我会保持很好的可移植性和可维护性。
If i'd had the same question, I'd search particular database documentation for the certain character list and then implement it in the form of regexp.
But I would never face such a question because basic latin characters, numbers and underscore are more than enough to name any field I use. So I'd keep great portability and maintainability.