在PHP方法内调用PDO
我正在尝试在函数的方法中调用变量$conn。变量包含PDO,但它不在范围内。如何在函数中使用它。我试过使用全局变量,但似乎不像使用普通变量那样有效。我也尝试过用函数传递它,但也不起作用 SQL可以工作并经过测试,如果我在函数外部调用$conn->exec(),它也可以工作在PHP方法内调用PDO,php,pdo,Php,Pdo,我正在尝试在函数的方法中调用变量$conn。变量包含PDO,但它不在范围内。如何在函数中使用它。我试过使用全局变量,但似乎不像使用普通变量那样有效。我也尝试过用函数传递它,但也不起作用 SQL可以工作并经过测试,如果我在函数外部调用$conn->exec(),它也可以工作 class Friend{ public $firstName; public $lastName; public $sql; public $conn; function __con
class Friend{
public $firstName;
public $lastName;
public $sql;
public $conn;
function __construct($firstName, $lastName, $conn){
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->conn = $conn;
}
public function create(){
$this->sql = "INSERT INTO vrienden (Voornaam, Achternaam) VALUES ('$this->firstName', '$this->lastName')";
// echo $this->sql;
$stmt = $this->sql;
// Hieronder het daadwerkelijke uploaden van de vriend.
echo $stmt;
$conn->exec($this->stmt);
}
}
在功能块的作用域内,当您仅写入
$conn->
时,它试图引用该块中的本地化变量。您需要改为引用类属性
$this->conn->exec($stmt);
您可以在这里了解有关OOP中变量可见性的更多信息:您的创建方法中有一个错误。 $conn->exec应该是$this->conn->exec 此外,您正在使用未定义的$this->stmt,必须将其更新为$stmt
public function create(){
$this->sql = "INSERT INTO vrienden (Voornaam, Achternaam) VALUES ('$this->firstName', '$this->lastName')";
// echo $this->sql;
$stmt = $this->sql;
// Hieronder het daadwerkelijke uploaden van de vriend.
echo $stmt;
$this->conn->exec($stmt);
}
请注意,您应该使用prepare语句和清理用户输入以消除任何SQL注入攻击
为了使您的代码更安全,这里有一个更详细的示例
public function create(){
$sql = "INSERT INTO vrienden (Voornaam, Achternaam) VALUES (:name, :lastname)";
$preparedQuery = $this->conn->prepare($sql);
$preparedQuery->execute(array(
":name" => $this->firstName,
":lastname" => $this->lastName
));
}
你能发布你是如何使用你的朋友类的吗?也许
$this->conn=$conn代码>将提示您。您的代码易受sql注入攻击。当您使用PDO时,您应该使用prepared语句
——您可以使用$this->conn->prepare()
或$this->conn->query()