我刚刚开始学习面向对象编程的概念,并且我已经用函数编写了这个类。
它工作正常,但我想知道我是否正确地完成了此操作...
这是我的代码:
class Database{
const DB_HOSTNAME = 'localhost';
const DB_USERNAME = 'root';
const DB_PASSWORD = 'password';
const DB_NAME = 'shop';
protected $_db_connect;
protected $_sql;
protected $_result;
protected $_row;
function db_connect(){
$this->_db_connect = mysql_connect(self::DB_HOSTNAME,self::DB_USERNAME,self::DB_PASSWORD) or die(mysql_error());
}
function slect_db(){
mysql_select_db(self::DB_NAME) or die(mysql_error());
}
function sql(){
$this->_sql = 'SELECT * FROM users';
}
function query(){
$this->_result = mysql_query($this->_sql);
}
function fetch_array(){
while($this->_row = mysql_fetch_array($this->_result)){
$username = $this->_row['user_USERNAME'];
echo "<ul>";
echo "<li>".$username."</li>";
echo "</ul>";
}
}
function db_close(){
mysql_close($this->_db_connect);
}
}
$database = new Database();
$database->db_connect();
$database->slect_db();
$database->sql();
$database->query();
$database->fetch_array();
$database->db_close();
最佳答案
请使用 PDO 或 MySQLi,因为它更安全并且 mysql_* 函数已被弃用,如上所述,我提供了一些使用 PDO 的通用代码来帮助您进行新的尝试。正如评论中所述,如果您正在寻找面向对象的设计,您真的不应该回显数据,您应该做的是在执行查询之后,返回您获取的行并从那里使用一些东西例如 foreach 循环,然后显示您的数据。以这种方式执行数据库类还将确保不会同时打开多个数据库连接!请注意,此代码仅供您引用,在生产或任何实际使用前应进行测试。
配置.php:
<?php
//Enter your database connection details here.
$host = 'localhost'; //HOST NAME.
$db_name = 'databasename'; //Database Name
$db_username = 'root'; //Database Username
$db_password = ''; //Database Password
try
{
$pdo = new PDO('mysql:host='. $host .';dbname='.$db_name, $db_username, $db_password);
}
catch (PDOException $e)
{
exit('Error Connecting To DataBase');
}
?>
数据库类.php:
<?php
class database
{
function __construct($pdo)
{
$this->pdo = $pdo;
}
function getData()
{
$query = $this->pdo->prepare('SELECT * FROM database');
$query->execute();
return $query->fetchAll();
}
}
?>
索引.php:
<?php
require_once 'config.php';
require_once 'database.class.php';
$db = new database($pdo);
$rows = $db->getData();
?>
关于PHP OOP 数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732897/