使用字符串常量作为mysql查询(带有一些类固醇)


Using a string constant as a mysql query (with some steroids)

这对PHP大师来说是个挑战:

我正在开发一个应用程序,它使用大量的MySql查询分布在大量的文件和函数中。显然,这些查询使用了一些从包含它们的函数派生出来的参数。

我的目标是:将所有这些查询分组到一个常量文件中,但保持其功能。有一个例子:

这是一个示例函数:

public function doQuery ($aParameter) {
    .
    .
    .
    $sqlQuery = mysql_query("SELECT * FROM Table WHERE id = '".$aParameter."'");
    .
    .
    .
}

这就是我想要做的,使用常量:

public function doQuery ($aParameter) {
    .
    .
    .
    $sqlQuery = mysql_query(THE_QUERY);
    .
    .
    .
}

正如你所看到的,问题是如果我使用一个定义的常量作为查询,它会丢失我需要用来从数据库中获得正确数据的参数。

那么最后一个问题是:有一种方法可以定义一个常量,并且可以包含一个变量,以便在使用该常量时确定?比如:

define("THE_QUERY",     "SELECT * FROM Table WHERE id = '".$aParameter."'");

是,使用参数化查询:

define("Q_QUERY1", "SELECT * FROM Table WHERE id = :1"); 
$cn = new PDO();
/* more code ... */
$arr = array();
$arr[":1"] = $parameterValue;
$s = $cn->prepare(Q_QUERY1);
$s->execute($arr);

主要思想是使用常量或文件来存储查询(例如,您可以查询sqlserver和mysql…),其中声明的参数带有某种自定义可识别的符号(:1, :PARAM1等),您必须在关联数组(如本例中的$arr[":1"])中匹配。

->execute方法将为您匹配参数和值,保护您的查询免受sql注入,并在必要时在参数周围添加引号。

如果您需要特定的数据类型,则需要使用->bindParam方法来指定您选择的PDO::PARAM_XXX参数。如果您需要进一步的详细信息,php文档非常有用:http://php.net/manual/en/pdo.constants.php