2017-01-19 13 views
0

テーブルを作成してデータベースに接続しようとしましたが、テーブルを作成するphp関数が私には役に立たないので、誰もがこの問題を解決する方法を知っていますか?私はPHPコードとインデックスを囲みます。私のPHPコードに問題があり、データベースの機能を分割する必要があります

prova.php:

class db_mysqls 
{ 
    public function connect() 
    { 
     $username="username"; 
     $password="password"; 
     try 
     { 
      $connection = new PDO("mysql:host=localhost;dbname=ijdb",$username, $password); 
      $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      echo ' <br> Connection Complete'; 
     } 
     catch (PDOException $e) 
     { 
      echo 'Connection failed: ' . $e->getMessage(); 
     } 
    } 

    public function createDB() 
    { 
     try 
     { 
      $sql="CREATE TABLE joke (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
        joketext TEXT, 
        jokedate DATE NOT NULL)"; 
      // use exec() because no results are returned 
      $connection->exec($sql); 
      echo "Table MyGuests created successfully"; 
     } 
     catch (PDOException $e) 
     { 
      echo 'Creation failed: ' . $e->getMessage(); 
     } 
    } 
} 
?> 

のindex.php:

<html> 
    <head> 
     <title>Index.html</title> 
    </head> 
    <body> 
     Eseguo prova.php <br> 
     <?php 
      include 'prova.php'; 
       $db = new db_mysqls(); 
       echo 'New Database Object Created'; 
       $db->connect(); 
       $db->createDB(); 
     ?> 
    </body> 
</html> 
+1

エラー報告には何がありますか? http://php.net/manual/en/function.error-reporting.phpそして、もしあなたがそれを含んでいなかったことについて私たちが知っておくべき他のエラーはありますか? –

+0

deja vu ...私が先ほど見ただけのスコープとまったく同じ問題です。 '$ connection'はクラスメンバーではないので、あなたのメソッドはそれにアクセスできません:http://stackoverflow.com/questions/41742851 /できないデータベース抽象化 - レイヤー間の作業#comment70681440_41742851 – CD001

+0

どうすればエラーを表示できますか?ページの機能でさまざまなエコーコマンドを出力しないため、動作しないことに気付きました。 –

答えて

2

問題は、変数のスコープです。すべての変数はローカルです。両方のメソッドで同じ接続にアクセスできるように、接続オブジェクトを格納するプライベートクラスメンバーを作成する必要があります。

<?php 
class db_mysqls 
{ 
    private $connection; 

    public function connect() 
    { 
     $username="username"; 
     $password="password"; 
     try 
     { 
      $this->connection = new PDO("mysql:host=localhost;dbname=ijdb",$username, $password); 
      $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      echo ' <br> Connection Complete'; 
     } 
     catch (PDOException $e) 
     { 
      echo 'Connection failed: ' . $e->getMessage(); 
     } 
    } 

    public function createDB() 
    { 
     try 
     { 
      $sql="CREATE TABLE joke (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
        joketext TEXT, 
        jokedate DATE NOT NULL)"; 
      // use exec() because no results are returned 
      $this->connection->exec($sql); 
      echo "Table MyGuests created successfully"; 
     } 
     catch (PDOException $e) 
     { 
      echo 'Creation failed: ' . $e->getMessage(); 
     } 
    } 
} 
?> 
+0

コードにprivate $接続を入れましたが、結果は変わりません:/ –

+0

'$ connection'から' $ this-> connection'にすべての参照を変更しましたか? – Luke

+0

はい、それは動作します!ありがとうございました! –

関連する問題