这对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