MySQL 使用变量准备语句

MySQL prepare statement using variable

我在下面使用 PHP + MySQL prepare 语句到 select 数据库中的值,使用函数将变量传递到语句中,但是我无法得到我想要的结果。问题是我不知道如何在准备语句中使用变量。

问题: 你能看看我使用的语法是否正确吗?

public function getToken($committeeValue){
    $stmt = $this->conn->prepare("SELECT u.token FROM users u INNER JOIN committee c ON u.email = c.email WHERE c.'$committeeValue' = 1");
    $stmt->execute();
}
Please try the below one.   

 public function getToken($committeeValue){
        $stmt = $this->conn->prepare("SELECT u.token FROM users u INNER JOIN committee c ON u.email = c.email WHERE c.".$committeeValue." = 1");
        $stmt->execute();
    }

我认为您在 string.Please 中 附加 php 变量 是错误的,试试这个。

您在 PHP 中连接字符串时犯了错误。

所以请尝试以下操作:

public function getToken($committeeValue){
    $committeeValue = trim($committeeValue);
    if(!empty($committeeValue)){
        $query = "SELECT u.token FROM users u INNER JOIN committee c ON u.email = c.email WHERE c.".$committeeValue." = 1";
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
    }
}

直接使用 var 内容是不安全的,因为它允许注入 SQL 语句。 在您的情况下,安全的方法是:

public function getToken($committeeValue){
  $committeeValue = trim($committeeValue);
  if(!empty($committeeValue)){
    $query = "SELECT u.token FROM users u INNER JOIN committee c ON u.email = c.email WHERE c.? = 1";
    $stmt = $this->conn->prepare($query);
    $stmt->bindParam(1, $committeeValue);
    $stmt->execute();
  }
}

查询将在没有 var 内容的情况下编译,因此您不必担心 SQL 注入。