MySQL使用变量准备语句

时间:2016-09-22 05:48:22

标签: php mysql database syntax prepare

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

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

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();
}

3 个答案:

答案 0 :(得分:2)

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();
    }

我认为你在字符串中附加一个php变量是错误的。请试试这个。

答案 1 :(得分:0)

你犯了在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();
    }
}

答案 2 :(得分:0)

直接使用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注入。