【发布时间】:2022-01-04 14:42:53
【问题描述】:
您好,我创建了以下工作。我对此很陌生,看不出为什么第二个代码不起作用。任何建议都将受到欢迎。
class Dbcon {
private $severname;
private $username;
private $password;
private $dbname;
private $charset;
public function connect () {
$this->servername ='localhost';
$this->username = 'ucmsadmin';
$this->password = 'P@xxwxrdxxx';
$this->dbname = 'umcs';
$this->charset = 'utmf8mb4';
try {
$dsn = "mysql:host=".$this->severname.";dbname=".$this->dbname.";charset".$this->charset;
$pdo = new PDO($dsn , $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION);
echo "Connected";
$queryCreateUsersTable = "CREATE TABLE IF NOT EXISTS `USERS` (
`ID` int(11) unsigned NOT NULL auto_increment,
`USER_NAME` varchar(255) NOT NULL default '',
`EMAIL` varchar(255) NOT NULL default '',
`PASSWORD` varchar(255) NOT NULL default '',
`ACCESS_LEVEL` tinyint(1) unsigned NOT NULL default '1',
`ACCOUNT_APPROVED` boolean NOT NULL default '0',
PRIMARY KEY (`ID`))";
if(!$pdo->query($queryCreateUsersTable)){
echo "Table creation failed: (" . $pdo->errno . ") " . $pdo->error;
} else {
echo' table created';
}
return $pdo;
} catch (PDOException $e) {
echo "connection failed: ".$e->getMessage();
}
}
}
但是,如果我将创建数据库表的部分移到公共函数中,我不会收到任何错误,但不会创建表。这就是我所做的;
class Dbcon {
private $severname;
private $username;
private $password;
private $dbname;
private $charset;
public function connect () {
$this->servername ='localhost';
$this->username = 'ucmsadmin';
$this->password = 'P@33w0rd101';
$this->dbname = 'umcs';
$this->charset = 'utmf8mb4';
try {
$dsn = "mysql:host=".$this->severname.";dbname=".$this->dbname.";charset".$this->charset;
$pdo = new PDO($dsn , $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION);
echo "Connected";
return $pdo;
} catch (PDOException $e) {
echo "connection failed: ".$e->getMessage();
}
}
public function createtable() {
$this->connect();
$queryCreateUsersTable = "CREATE TABLE IF NOT EXISTS `USERS` (
`ID` int(11) unsigned NOT NULL auto_increment,
`USER_NAME` varchar(255) NOT NULL default '',
`EMAIL` varchar(255) NOT NULL default '',
`PASSWORD` varchar(255) NOT NULL default '',
`ACCESS_LEVEL` tinyint(1) unsigned NOT NULL default '1',
`ACCOUNT_APPROVED` boolean NOT NULL default '0',
PRIMARY KEY (`ID`))";
return $queryCreateUsersTable;
}
}
在我运行的 index.php 中
include('classes/dbclass.php');
$object = new Dbcon;
$object->connect();
$object2 = new Dbcon;
$object2->createTable();?>
【问题讨论】:
-
我看到的一个问题是您创建并使用了
$this->severname,但您将 localhost 分配给了$this->servername——一个小错字会产生很大的不同。 -
您在
createtable中返回查询字符串,但您从未像第一次尝试那样在数据库中实际运行它。 -
您的第二个版本什么都不做:
connect()方法返回PDO实例,createTable()只返回 SQL 查询。