sql >> データベース >  >> RDS >> Mysql

キャッチされないエラー:nullエラー時にメンバー関数prepare()を呼び出す

    コードにいくつかの間違いがあります。この行を使用してみてください:

    接続ファイル:

    <?php
    class Connection {
        public $dbh;
    
        // Setting Database Source Name (DSN)
        public function __construct() {
            $dsn = 'mysql:host=localhost;dbname=employees';
            // Setting options
            $options = array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
            // Making the connection to the database
            try {
                $this->dbh = new PDO($dsn, 'root', '', $options); 
            }
            catch (PDOException $e) {
                $this->error = $e->getMessage();
            }
        }
    }
    
    $connection = new connection();
    

    users.phpファイル:

    <?php
    
    include 'connection.php';
    class Users {
        public $name;
        public $surname;
        public $employmentDate;
        public $connection;
    
        public function __construct($connection)
        {
            $this->connection = $connection;
            if(isset($_POST['Submit'])) {
                $this->name = $_POST['name'];
                $this->surname = $_POST['surname'];
                $this->employmentDate = $_POST['employmentDate'];
            }
        }
    
        // Inserting users values to the database table
        public function insertUserValues() {
            $query = 'INSERT INTO employee (name,surname,employment_date) VALUES (:name,:surname,:employmentDate)';
            $stmt = $this->connection->dbh->prepare($query);
            $stmt->bindValue(':name',$this->name, PDO::PARAM_STR);
            $stmt->bindValue(':surname',$this->surname, PDO::PARAM_STR);
            $stmt->bindValue(':employmentDate',$this->employmentDate, PDO::PARAM_STR);
            $stmt->execute();
        }
    }   
    
    $users = new Users($connection);
    $users->insertUserValues();
    

    説明:

    • $ connection変数をusersクラスに渡す必要があります(またはglobal $connection;を使用してインポートします)。 )
    • 接続ファイルでdbhプロパティを表示する必要があります。そうしないと、データベースでクエリを実行できません。
    • PDO prepare() メソッドは最初の引数でクエリを待機しています
    • 以前に値をバインドしたことがある場合は、execute()メソッドに配列を渡す必要はありません


    1. ElasticSearchをSQLと自動的に同期する

    2. flywayによって作成されたpostgresqljdbc接続にタイムゾーンを設定するにはどうすればよいですか?

    3. ReportServerインスタンスの*すべての*SSRSレポート全体の*すべての*SSRSデータセットのリストを見つけるためにクエリを実行します

    4. OracleとPagination