2016-09-21 15 views
0

こんにちは私はクラスを使用してPDO接続後に挿入プロセスに取り組んでいます。すべての接続と表示を確認してください。私は、このエラーライン持っているクラスに新しい関数を作成し、挿入処理のためのコマンドを入力したときには:致命的なエラー:未知のエラー:var/wwwで定義されていないfunction_name()を呼び出す

Fatal error: Uncaught Error: Call to undefined function db_connection_function() in /var/www/html/test/index.php:29 Stack trace: #0 /var/www/html/test/index.php(48): connection->add_member_to_table() #1 {main} thrown in /var/www/html/test/index.php on line 29

この機能は私にエラーを与える

public function add_member_to_table() { 
    $this->query = db_connection_function()->prepare("INSERT INTO users(username, password) VALUES('onur', 'turali')"); 
    $this->query->execute(); 

    if($this->query == true) { 
     echo "Member registered"; 
    } else { 
     echo "Error"; 
    } 
} 

を私はconnection_db_link>の$ this - を試してみました。..私はconnect_db_link(関数名はmysqlに接続する)の代わりに関数名を入力しようとしたが、これは役に立たない。どうすればこの問題を解決できますか?

私のソースコード:

<?php 
    class connection{ 
     public $connection_db_link; 
     public $db_host = "localhost"; 
     public $db_user = "root"; 
     public $db_pass = "Antalya07Ragnar"; 
     public $db_name = "test"; 

     public function db_connection_function(){ 
      try{ 
       $this -> connection_db_link = new PDO("mysql:host=$this->db_host;$this->db_name", $this->db_user, $this->db_pass); 
       $this->connection_db_link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       return $this->connection_db_link; 
      }catch(PDOException $e){ 
       echo "Error: ".$e->getMessage(); 
      } 
     } 

     public $query; 

     public function add_member_to_table(){ 
      $this->query = db_connection_function()->prepare("INSERT INTO users(username, password) VALUES('onur', 'turali')"); 
      $this->query->execute(); 
      if($this->query == true){ 
       echo "Member registered"; 
      }else{ 
       echo "Error"; 
      } 
     } 

     public function display_connection(){ 
      if($this->connection_db_link == true){ 
       echo "Connection success"; 
      } 
     } 
    } 

    $user = new connection; 
    $user->db_connection_function(); 
    $user->display_connection(); 
    $user->add_member_to_table(); 
    ?> 
+0

そのあなたの方法:あなたが確信している

$this->connection_db_link = new PDO('mysql:host=$this->db_host;dbname=$this->db_name', $this->db_user, $this->db_pass); 

後、準備文では、このように動作します、その '$ this-> db_connection_function()'とコンストラクタでそれを作成し、それを代わりにプロパティとして使うだけでいいのです – Ghost

+0

SQLプロセスの準備が必要なときは、常に関数を使って接続します。なぜなら、コマンドを準備する前に関数を呼び出すからです。しかし、別のファイルに接続機能がある場合、私はコンストラクタを使用します。それは私が知っている良い方法です。しかし、クラスを使用してそのPDO接続は、実際に私を強制した。 – Onur

+0

関数を呼び出すたびに新しい接続を作成しないでください。 '$ this-> connection_db_link'がすでに設定されているかどうかを確認し、新しい接続を開く代わりにその変数を返します。 – Barmar

答えて

3

編集:add_member_to_table()関数で

、変更db_connection_function()


あなたがdb_connection_function()機能を使用する前に$this->db_connection_function()に、あなたはあなたがtに正常に接続されたことを確認する必要があります彼はデータベース。

あなたのPDO接続文はdbname=が欠落して、代わりに次のようになります。あなたのクラス内

$stmt = $dbh->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); 
$stmt->bindParam(':username', $username); 
$stmt->bindParam(':password', $password); 

// insert one row 
$name = 'onur'; 
$value = 'turali'; 
$stmt->execute(); 
+0

ありがとう!どのように私の心にこれが来ていない..私はこれがpostメソッドでのみ動作すると思った。私はこの無知を取り除く。再度、感謝します。 – Onur

関連する問題