【问题标题】:How do you insert a PHP constant into a SQL query?如何将 PHP 常量插入 SQL 查询?
【发布时间】:2012-01-16 17:33:21
【问题描述】:

我有一个 PHP 文件,其中我的数据库配置设置定义为常量,例如:

<?php

define(DB_HOST,"localhost");
define(DB_USERNAME,"root");
define(DB_PASSWORD,"password");
define(DB_NAME,"db_users");
define(DB_TABLE_1,"table_1");
define(DB_TABLE_2,"table_2);

?>

显然,每当我想连接到我的数据库时,我都会包含上述文件。但是,当我将表定义常量插入 SQL 查询(见下文)时,它似乎不起作用。我是否需要正确转义常量或以某种方式连接它?

$query = "SELECT users FROM DB_TABLE_1";

【问题讨论】:

  • 如果 PHP 只知道常量和只读变量之间的区别...

标签: php mysql sql


【解决方案1】:

您必须使用字符串连接(任何类型的)。​​

$query = "SELECT users FROM " . DB_TABLE_1;

常量不会像变量那样插入到字符串中。

一种骇人听闻的替代方法是使用变量函数:

$const = 'constant';
$query = "SELECT users FROM {$const('DB_TABLE_1')}";

它将执行constant() 函数并返回常量的值,但这通常不是一个好主意,如果只是为了便于阅读的话。

【讨论】:

  • 我偶然发现了您关于在查询中使用常量以及是否可能的答案(这方面的内容不多)。我认为这是一个非常好的主意,马克。有时稍微hackish 可以帮助防止进一步注入一两步。这与我前段时间的工作类似,并取得了一些可喜的成果。
【解决方案2】:

只需将其放在引号之外,它应该可以正常工作:

$query = "SELECT users FROM ".DB_TABLE_1;

【讨论】:

    【解决方案3】:

    我找到了两种方法。

    1.-

    define("VALUE1", "someValue");
    $query = "SELECT * FROM TABLE WHERE `Column` /*=" . VALUE1 . "*/";
    

    2.-

    define("VALUE1", "someValue");
    define("VALUE2", "otherValue");
    $query = "INSERT INTO TABLE (`Column1`, `Column2`) VALUES (" . VALUE1 . ", " . VALUE2 . ")";
    

    我使用的反引号 (``) 因为我使用的是 phpmyadmin,所以您可能不需要它们。

    【讨论】:

      【解决方案4】:

      我认为这更容易:

      $query = "SELECT users FROM '.DB_TABLE_1.'";
      

      当使用多个表时:

      $query = "SELECT TB_1.users, TB_2.names FROM '.TB_1.'
                INNER JOIN '.TB_2.' 
                ON x=y";
      

      另外,这样更好:

      define("DB_HOST","localhost");
      

      【讨论】:

        猜你喜欢
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多