Php 对MySQL的查询返回null,在它正常工作之前
基本上,我想使用PHPPDO创建一个查询,以检查我的db“test”中是否存在表“page”。我不知道怎么做,我得到了一些帮助Php 对MySQL的查询返回null,在它正常工作之前,php,mysql,Php,Mysql,基本上,我想使用PHPPDO创建一个查询,以检查我的db“test”中是否存在表“page”。我不知道怎么做,我得到了一些帮助 我的代码工作得很好。。。直到现在我让一切都在课堂上进行。。。现在var\u dump($r2)返回NULL,我不知道代码出了什么问题。除了把这个放到OOP中,我没有做任何改变 有人能发现问题吗??因为我看不见。 Thx u 完整的课程如下 class phase2 { function __construct () { $db
我的代码工作得很好。。。直到现在我让一切都在课堂上进行。。。现在
var\u dump($r2)
返回NULL
,我不知道代码出了什么问题。除了把这个放到OOP中,我没有做任何改变
有人能发现问题吗??因为我看不见。
Thx u
完整的课程如下
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;
}
}
}
我能看到的最大问题是,您没有创建$db-仅在构造内部。尝试将以下内容添加到此部分:
class phase2 {
function __construct () {
添加此语句public$db代码>:
class phase2 {
public $db;
function __construct () {
除非我弄错了,否则如果不先声明变量,就不能从方法中强制转换变量。对于需要从该类中的其他方法访问的任何其他变量,都需要执行相同的操作。阅读基本知识:
另外,我建议打开错误报告。您的查询正在尝试查找名为page
的表,但是,您的CREATE table
创建名为pages
的表:
$IDB1 = $this->db->prepare(
"CREATE TABLE pages ("
...
$r1 = $this->db->query('SHOW TABLES LIKE \'page\'');
除非您实际拥有两个表,否则错误位于这两个位置之一。您正在构造函数中使用require\u once()。该类仅在第一次正确初始化。在此之后,配置将不会加载,因此不会设置变量。“除了将其放入OOP中,我没有做任何更改…”这是一个重大更改。一个完美的示例,如$r1
是一个糟糕的做法。您检查过数据库是否已连接吗?谢谢。我的眼睛累了,完全错过了它。它现在可以工作了。我只是忘了是“页面”而不是“页面”。但我对_构造的理解是,它在每次创建类时声明变量,因此不需要在外部创建它。但是我不是在铸造变量,而是在铸造$this->db
,它已经被分配到$this->db=$db
内部结构。不知何故,它是有效的?这很奇怪-我建议在构造之外声明,无论如何,这是一种良好的实践,如果其他人也需要查看代码,它将有所帮助。
$IDB1 = $this->db->prepare(
"CREATE TABLE pages ("
...
$r1 = $this->db->query('SHOW TABLES LIKE \'page\'');