2017-01-19 3 views
0

Ich habe versucht, die Funktion zu teilen, um eine Tabelle zu erstellen und mit der Datenbank zu verbinden, aber die PHP-Funktion, die die Tabelle erstellt, funktioniert nicht für mich, weiß jemand, wie man dieses Problem beheben kann? Ich füge den PHP-Code und den Index bei.Ich habe ein Problem mit meinem PHP-Code, ich muss Funktion für meine Datenbank teilen

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

Fehlerberichte sagt was? http://php.net/manual/en/function.error-reporting.php und gibt es noch weitere Fehler, die wir kennen sollten? –

+0

deja vu ... genau das gleiche Problem mit Scoping als eine, die ich nur früher sah, '$ connection' ist kein Mitglied der Klasse, so dass Ihre Methoden nicht darauf zugreifen können: http://stackoverflow.com/questions/41742851/Unable-to-Get-Datenbank-Abstraktion-Layer-to-Arbeit # comment70681440_41742851 – CD001

+0

Wie kann ich den Fehler sehen? Ich erkannte, dass das nicht funktioniert, weil es nicht den verschiedenen Echo-Befehl in der Funktion der Seite druckt. –

Antwort

2

Das Problem ist, den Geltungsbereich von Variablen. Alle Ihre Variablen sind lokal. Sie müssen ein privates Klassenmitglied zum Speichern des Verbindungsobjekts erstellen, damit beide Methoden auf dieselbe Verbindung zugreifen können.

<?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

Ich stelle die private $ Verbindung in den Code, aber das Ergebnis ändert sich nicht:/ –

+0

Haben Sie auch alle Referenzen von '$ connection' auf' $ this-> connection' geändert? – Luke

+0

Jetzt ja und es funktioniert! Vielen Dank! –

Verwandte Themen