对MySQL的查询返回null,在它以前工作得很好


A query to MySQL returns null and before it used to work just fine

基本上,我想使用php-PDO创建一个查询,以检查表"page"是否存在于我的数据库"test"中。我不知道怎么做,我在这里得到了一些帮助。

我的代码运行得很完美。。。直到现在,我在课堂上一切顺利。。。现在CCD_ 1返回CCD_。除了把这个放到OOP中,我什么都没改。。。

有人能发现问题吗??因为我看不见。Thx u

$r1 = $this->db->query('SHOW TABLES LIKE ''page''');

 // Debbug
    $r2 = $r1->fetchAll;
    var_dump ($r2);
    if (count($r1->fetchAll()) > 0 ) {
        echo "The table PAGE exists";
    }

完整的类别是以下一个

    class phase2 {
        function __construct () {
        $dbFile = 'dbconfig.php';
        $this->dbFile = $dbFile;
        require_once ("$dbFile");   

        $step = $_GET["step"];
        $username = $DB_USER;
        $password = $DB_PASS;
        $server = $DB_SERVER;
        $dbName = $DB_NAME;
        $this->step = $step;
        $this->dbFile = $dbFile;
        $this->username = $username;
        $this->password = $password;
        $this->server = $server;
        $this->dbName = $dbName;
        $db = new PDO ('mysql:host=' .$server.';dbname='.$this->dbName,$this->username,$this->password);
        $this->db = $db;
        if (empty ($_GET['fot']) ) { 
            $fOT = 'false'; 
        } elseif ($_GET['true']) { $fOT = 'true'; }
        $this->fOT = $fOT;
        $this->IDB = $this->handleDatabase( 1 );
        $this->IDB2 = $this->handleDatabase( 2 );
        $this->IDB3 = $this->handleDatabase( 3 );
        }

public function handleDatabase ($num = 1){
// Prepare SQL Statements
    $IDB1 = $this->db->prepare( 
         "CREATE TABLE pages (
          id int(11) NOT NULL auto_increment,
         subject_id int(11) NOT NULL,
          menu_name varchar(30) NOT NULL,
          position int(3) NOT NULL,
          visible tinyint(1) NOT NULL,
          content text NOT NULL,
          PRIMARY KEY  (id)
    )ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8");
    $IDB2 = $this->db->prepare("
        CREATE TABLE subjects (
          id int(11) NOT NULL auto_increment,
          menu_name varchar(30) NOT NULL,
          position int(3) NOT NULL,
          visible tinyint(1) NOT NULL,
          PRIMARY KEY  (id)
    )ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8");
    $IDB3 = $this->db->prepare("
        CREATE TABLE users (
          id int(11) NOT NULL auto_increment,
          username varchar(50) NOT NULL,
          hashed_password varchar(40) NOT NULL,
          PRIMARY KEY  (id)
    )ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8");
    $name = "IDB".$num;
    return isset( $$name)?$$name:false;
}
//Set Option to True or False
function createTablePages ($fOT){

    $r1 = $this->db->query('SHOW TABLES LIKE ''page''');
// Debbug
    $r2 = $r1->fetchAll;
    var_dump ($r2);

    if (count($r1->fetchAll()) > 0) {

        echo "The table PAGE exists";
    } elseif ($fOT == 'true') {
            echo "enteres";
            $this->IDB1->execute();
            $this->stepFunction (1,false);
    } 
}
function createTableSubjects ($fOT){
    $r2 = $this->db->query('SHOW TABLES LIKE ''subjects''');
    if (count($r2->fetchAll()) > 0  && $fOT == 'false') {
            echo "The table SUBJECTS exists ";
    } elseif ($fOT == 'true') {
        $this->IDB2->execute();
        $this->stepFunction (2,false);
    }
}
function createTableUsers ($fOT){
    $r3 = $this->db->query('SHOW TABLES LIKE ''users''');   
    if (count($r3->fetchAll()) > 0  && $fOT == 'false') {
            echo "The table USERS exists";
    } elseif ($fOT == 'true') {
            $this->IDB3->execute();
            echo "Would you like to populate all the tables?";
    }   
}

public function stepFunction ($fOT,$step){
switch ($step) {
    case 0: 
            $this->createTablePages ($fOT);
            break;
    case 1: 
            $this->createTableSubjects($fOT);
            break;
    case 2: $this->createTableUsers ($fOT);
            break;
    }

}
    }

您的查询正试图找到一个名为page的表,但是,您的CREATE TABLE创建了一个名称为pages:的表

$IDB1 = $this->db->prepare( 
    "CREATE TABLE pages ("
...
$r1 = $this->db->query('SHOW TABLES LIKE ''page''');

除非两个表都有,否则错误就在这两个地方之一。

我能看到的最大问题是,您没有创建$db——只在构造内部创建。尝试添加到此部分:

class phase2 {
    function __construct () {

添加此语句public $db;:

class phase2 {
    public $db;
    function __construct () {

除非我弄错了,否则在不首先声明变量的情况下,不能从方法中强制转换变量。您需要对需要从该类中的其他方法访问的任何其他变量执行同样的操作。阅读基本知识:http://www.php.net/manual/en/language.oop5.basic.php

此外,我建议打开错误报告。

您在构造函数中使用require_once()。该类只会在第一次正确初始化。之后,配置将不会加载,因此不会设置变量。

相关文章: