嗨,我創建了以下作業。我對此很陌生,不明白為什么第二個代碼不起作用。任何建議將受到極大歡迎。
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 我運行
$object = new Dbcon;
$object->connect();
$object2 = new Dbcon;
$object2->createTable();?>
uj5u.com熱心網友回復:
該createTable()函式只是定義了一個包含一些 SQL 的字串。它永遠不會將該 SQL 發送到要執行的資料庫。
基于原始代碼,您可以更像這樣撰寫它:
public function createtable() {
$pdo = $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`))";
if(!$pdo->query($queryCreateUsersTable)){
echo "Table creation failed: (" . $pdo->errno . ") " . $pdo->error;
} else {
echo' table created';
}
}
但是我要指出,每次運行查詢時都創建一個新連接是非常低效的。相反,您應該嘗試在 PHP 腳本的生命周期內創建一次連接,并繼續重復使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403882.html
標籤:
上一篇:如何在WooCommerce中購物車和訂單評論后的產品名稱后顯示ACF欄位?
下一篇:Linux(一)——計算機概論
