在PHP方法内调用PDO

在PHP方法内调用PDO,php,pdo,Php,Pdo,我正在尝试在函数的方法中调用变量$conn。变量包含PDO,但它不在范围内。如何在函数中使用它。我试过使用全局变量,但似乎不像使用普通变量那样有效。我也尝试过用函数传递它,但也不起作用 SQL可以工作并经过测试,如果我在函数外部调用$conn->exec(),它也可以工作 class Friend{ public $firstName; public $lastName; public $sql; public $conn; function __con

我正在尝试在函数的方法中调用变量$conn。变量包含PDO,但它不在范围内。如何在函数中使用它。我试过使用全局变量,但似乎不像使用普通变量那样有效。我也尝试过用函数传递它,但也不起作用

SQL可以工作并经过测试,如果我在函数外部调用$conn->exec(),它也可以工作

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