如何在 Mysqli 准备语句中使用 PHP 常量
How to use PHP constants in Mysqli prepared statements
我正在构建一个包含大量数据库查询的 API。为了避免在每个查询中重复一些预先建立的值,我创建了一些 PHP 常量。但是我不确定将它们包含在 Mysqli 准备好的语句中的正确方法。我知道常量不能通过引用传递。所以我想知道我是否应该为包含常量的查询创建一个变量,或者我是否可以直接将带有常量的字符串传递给 prepare() 函数。所以如果我这样做是可以的,或者我应该创建一个变量并在调用 prepare() 之前将字符串存储在那里?
$stmt = $this->conn->prepare("SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'");
$stmt->bind_param("s", $email );
对抗
$query = "SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("s", $email );
由于您使用的是常量值,因此您不会通过将值连接到查询中而使自己暴露于潜在的 SQL 注入攻击。所以,我认为你所拥有的很好。您的另一个选择是将常量值分配给变量并绑定它,如下所示:
$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$inactiveState = STATE_INACTIVE;
$stmt = $this->conn->prepare($query);
$stmt->bind_param("ss", $email, $inactiveState);
在这里也值得指出的是,这是 mysqli,而不是 PDO。如果您使用的是 PDO,您可以这样做:
$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(1, $email, PDO::PARAM_STR);
$stmt->bindValue(2, STATE_INACTIVE, PDO::PARAM_STR);
我正在构建一个包含大量数据库查询的 API。为了避免在每个查询中重复一些预先建立的值,我创建了一些 PHP 常量。但是我不确定将它们包含在 Mysqli 准备好的语句中的正确方法。我知道常量不能通过引用传递。所以我想知道我是否应该为包含常量的查询创建一个变量,或者我是否可以直接将带有常量的字符串传递给 prepare() 函数。所以如果我这样做是可以的,或者我应该创建一个变量并在调用 prepare() 之前将字符串存储在那里?
$stmt = $this->conn->prepare("SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'");
$stmt->bind_param("s", $email );
对抗
$query = "SELECT city FROM masters WHERE email = ? AND estado != '" . STATE_INACTIVE . "'";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("s", $email );
由于您使用的是常量值,因此您不会通过将值连接到查询中而使自己暴露于潜在的 SQL 注入攻击。所以,我认为你所拥有的很好。您的另一个选择是将常量值分配给变量并绑定它,如下所示:
$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$inactiveState = STATE_INACTIVE;
$stmt = $this->conn->prepare($query);
$stmt->bind_param("ss", $email, $inactiveState);
在这里也值得指出的是,这是 mysqli,而不是 PDO。如果您使用的是 PDO,您可以这样做:
$query = "SELECT city FROM masters WHERE email = ? AND estado != ?";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(1, $email, PDO::PARAM_STR);
$stmt->bindValue(2, STATE_INACTIVE, PDO::PARAM_STR);