class DBAcess{
private $_mysql_connection;
function db_access(){
$this->_mysql_connection = mysqli_connect('localhost', 'root', 'aaaaa', 'test') or die('cant connect to the db server');
}
function display_user($user_id){
$sql = "SELECT * FROM email WHERE id = '$user_id'";
$db_handle = mysqli_query($this->_mysql_connection, $sql) or die('cant query db');
$num_count = mysqli_num_rows($db_handle);
if($num_count != 1){
echo 'no record';
}else{
while($row = mysqli_fetch_array($db_handle)){
echo $row['email'];
}
}
}
}
$db_operation = new DBAcess();
$db_operation->db_access();
$db_operation->display_user(1);
答案 0 :(得分:1)
嗯,这取决于。如果你问这是否是一个好的做法:它会起作用,但是这个代码存在问题会使其难以维护。 您的数据库类应该只处理连接,运行查询,获取插入的ID以及帮助方法,例如格式化这些查询的结果等。 您的用户类应该调用数据库类来运行查询并获取用户信息。 您可能还需要考虑将数据库凭据移动到配置文件中。将它们声明为常量,因此您只需使用_DB_SERVER _,_ DB_USER_等。
答案 1 :(得分:0)
我个人尝试在数据库中的表之后对我的类进行建模,并使用单独的数据库类来完成繁重的工作。有时我会静态地执行它,如果DB类只进行按需查询,而不关心是否保存句柄,有时我实例化DB类来运行多个查询。下面的示例使用静态调用DB来保存代码,但我确信您可以在适合您的应用程序时执行此操作。
我还强烈建议您使用PDO库来处理数据库内容。大多数情况下,您可以对所有驱动程序使用相同的代码,但行为中存在一些例外情况。如果您准备如图所示的查询,它还消除了对数据库或Web输入的任何需要。因此,SQL注入不是问题。
我没有尝试过这个,但大局至少是
<?php
class User {
// Don't know your fields, these are examples
private $first_name;
private $last_name;
private $email;
private $id;
public function __construct($user_id = NULL){
if( !empty($user_id) ){
$this->loadFromDB($user_id);
}
}
public function loadFromDB($id){
$sql = 'SELECT * FROM email WHERE id = :id';
$result = Database::query($sql,[':id'=>$id]);
if( sizeof($result) !== 1){
throw new Exception("Failed to load user or user not found");
}
$this->first_name = $result[0]["first_name"];
$this->last_name = $result[0]["lastname"];
$this->email = $result[0]["email"];
$this->id = $id;
}
public function display(){
echo $this->email;
}
}
class Database {
public static function query($sql, $params){
try{
$db = new PDO('mysql:dbname=test;host=127.0.0.1;charset=UTF8','root','aaaa');
}
catch(PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}
$stmt = $db->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll();
return $result;
}
}
$user = new User(1);
$user->display();