如何在php中检查字符串是否是sql语句的有效兼容列名? 只是一个字符串匹配。
答案 0 :(得分:38)
最终每个字符串都是一个有效的列名,一旦用双引号括起来(MySQL可能不遵守该规则,具体取决于配置。它不会在默认安装中使用双引号作为标识符引号)。
但是,如果您想要跨平台(如不同的DBMS标记所示),您应该检查最小公分母。
PostgreSQL manual has a nice definition:
SQL标识符和关键字必须以字母(a-z,但也包含带变音符号和非拉丁字母的字母)或下划线(_)开头。标识符或关键字中的后续字符可以是字母,下划线,数字(0-9)或美元符号($)。请注意,根据SQL标准的字母,标识符中不允许使用美元符号,因此它们的使用可能会降低应用程序的可移植性
因此,您应该使用正则表达式检查以下内容:
因此,如下所示的正则表达式应涵盖此内容:
^[a-zA-Z_][a-zA-Z0-9_]*$
由于SQL不区分大小写(除非使用双引号),允许使用大写和小写字母。
答案 1 :(得分:1)
您可以按如下方式使用MySQL查询来获取特定表中的字段:
SHOW FIELDS FROM tbl_name
然后是一些简单的PHP:
$string_to_check = 'sample';
$valid = false;
$q = mysql_query("SHOW FIELDS FROM tbl_name");
while($row = mysql_fetch_object($q)) {
if($row->Field == $string_to_check) {
$valid = true; break;
}
}
if($valid) {
echo "Field exists";
}
答案 2 :(得分:0)
使用
使用show columns或描述查询。 而不是从结果中验证。
答案 3 :(得分:-2)
如果我有同样的问题,我会搜索特定数据库文档中的特定字符列表,然后以regexp的形式实现它。
但我永远不会面对这样的问题,因为基本的拉丁字符,数字和下划线足以命名我使用的任何字段。因此,我保持了良好的可移植性和可维护性。