1

当我为 MySQL 编写查询时,通常使用如下形式:

$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"".$column."\"" = \"some_value\" ";

如果我想避免使用 \""。变量的顺序,我可以使用这种其他形式还是可能存在一些兼容性问题或其他一些问题?

$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"$column\" = \"some_value\";
4

2 回答 2

4

在这两种情况下,您所做的都很好,但请注意:

1)您在第一种形式中所做的是使用字符串,如字符串文字,这意味着您可以/应该使用单引号而不是双引号,因为它们的解析速度要快得多。

 $column = 'column_name';
 $query = 'SELECT * FROM table_name WHERE ' . $column . ' = "some_value"';

你在第二个例子中所做的也很好,它只是取决于你试图避免使用转义字符的原因,但如果你只是为了可读性而这样做,你所拥有的就很好。

值得注意的是,以您在此处执行的方式处理查询已被弃用,您应该查看 PDO 并以这种方式注入您的值。

根据上面的评论编辑- 从列周围删除“。

于 2013-01-04T00:41:46.800 回答
2

是的你可以。

  • 用双引号分隔的字符串由 PHP 解析器解释。
  • 为确保正确识别变量,请将其放入大括号中

例子

$variable = 1;

$array = array( 1,2 );

$object = new stdclass();
$object->member = 1;

$string = "You can basically put every kind of PHP variable into the string. This can be a simple variable {$variable}, an array {$array[0]} or an object member {$object->member} even object methods.";

如果您希望 PHP 采用$variable不解释的字面意思,请将字符串放在单引号中。

我真正喜欢用于查询的另一种方法是heredoc表示法

$sqlQuery = <<< EOQ
    SELECT 
           "field"
    FROM
           "table"
    WHERE
           "id" = '{$escapedValue}'
EOQ;

还有一点注意事项:

在 SQL 中,你应该用单引号分隔值,用双引号(ANSI 兼容)或反引号 ``` 来分隔表名和字段名等标识符

于 2013-01-04T00:58:45.133 回答