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);