1

那么 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."'");
4

1 回答 1

3

是的,使用参数化查询:

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 进行查询,对:1mysql :PARAM1...您必须在关联数组中匹配,例如$arr[":1"]在这种情况下。

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

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

于 2013-04-12T22:09:54.463 回答