我使用下面的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();
}
答案 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注入。