SQL 问题 - 在 PHP 的查询中使用带有 '' 或 "" 的特殊字符之间的区别
SQL QUESTION - Difference between using special characters with '' or with "" in a query in PHP
在这个 php 函数中,我正在查询 table 名称包含特殊字符,如 $
所以在 php 如果我使用 ""
在查询中,应用程序认为 table 名称是一个变量,因此它 returns Variable not found
.
例1:
$SQL = "SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = 'NAT'
and [Request Code] not like 'AC%'";
但是如果我在查询中使用 ''
他认为 ""
中的所有内容都是一列所以它 returns Invalide column Name
在这种情况下 NAT
例二:
$SQL = 'SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = "NATUREZA FUNC"
and [Request Code] not like "AC%"';
避免此问题的最佳方法?
我现在可以使用 mysql_real_escape_string
来转义它们,但是有很多 table。我想现在是否存在更有效的方法
这是一个非常不明确的数据库命名约定。您是否尝试过使用反引号 (`) 来包围 table 引用。参见:When to use single quotes, double quotes, and backticks in MySQL
使用准备好的语句可能是更好的选择。
这个问题的解决方案是使用准备好的语句。
$SQL = 'SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = :nat
and [Request Code] not like :ac';
然后使用绑定值
$result->bindValue(':nat', "nat, PDO::PARAM_STR);
$result->bindValue(':year', $ac, PDO::PARAM_STR);
在这个 php 函数中,我正在查询 table 名称包含特殊字符,如 $
所以在 php 如果我使用 ""
在查询中,应用程序认为 table 名称是一个变量,因此它 returns Variable not found
.
例1:
$SQL = "SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = 'NAT'
and [Request Code] not like 'AC%'";
但是如果我在查询中使用 ''
他认为 ""
中的所有内容都是一列所以它 returns Invalide column Name
在这种情况下 NAT
例二:
$SQL = 'SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = "NATUREZA FUNC"
and [Request Code] not like "AC%"';
避免此问题的最佳方法?
我现在可以使用 mysql_real_escape_string
来转义它们,但是有很多 table。我想现在是否存在更有效的方法
这是一个非常不明确的数据库命名约定。您是否尝试过使用反引号 (`) 来包围 table 引用。参见:When to use single quotes, double quotes, and backticks in MySQL
使用准备好的语句可能是更好的选择。
这个问题的解决方案是使用准备好的语句。
$SQL = 'SELECT COUNT(*)
FROM [table_name]
left join [table_name] as d on [Code] = d.[Code]
where d.[Dimension Code] = :nat
and [Request Code] not like :ac';
然后使用绑定值
$result->bindValue(':nat', "nat, PDO::PARAM_STR);
$result->bindValue(':year', $ac, PDO::PARAM_STR);