【发布时间】:2015-05-12 14:20:12
【问题描述】:
我正在尝试学习 OOP PHP 和 PDO,现在有点混乱。在阅读了很多文章后,我决定创建我的第一个项目。这是我的代码。
class db{
private static $instance = NULL;
private static $DSN = 'mysql:host=localhost;dbname=firstproject';
private function __construct(){
}
public static function getInstance(){
if(!self::$instance){
self::$instance = new PDO(self::$DSN,'root','');
self::$instance->exec('SET NAMES utf8');
}
return self::$instance;
}
public function reg_insert($usr_name,$usr_password){
self::$instance->query("INSERT INTO users VALUES(null,'$usr_name','$usr_password')");
}
}
class insRegInfo{
private $username;
private $password;
public function __construct($username,$password){
$dbe = db::getInstance();
db::reg_insert($username,$password);
}
}
if(isset($_POST['register'])){
$reg = new getRegInfo($_POST['username'],$_POST['password']);
}
<head>
<title>PDO Database Project</title>
</head>
<body>
<form action="" method="post">
<p>
<label>User Name</label>
<input type="text" name="username"/>
</p>
<p>
<label>Password</label>
<input type="password" name="password"/>
</p>
<p>
<input type="submit" name="register" value="Register" />
</p>
</form>
</body>
如您所见,这是一个简单的注册系统。 我的问题是,在这样的另一个类中调用数据库类,这是一种真正的方式还是应该将插入函数带到数据库类,或者我需要将 db 类定义为父类,将 insRegInfo 定义为子类并使用 extends 方法?
哪种方式更好还是取决于我?
【问题讨论】:
-
你这里有一个SQL注入漏洞,需要通过参数绑定来修复。您以纯文本形式存储密码,这也是一个安全风险——它们应该使用
password_hash()进行散列处理。配置细节通常不在课堂上,因为它们通常在应用程序中根据每个环境进行更改。不要使用服务器的 root 密码。 -
另外,codereview.stackexchange.com 更适合此类帖子。
-
我不关心安全性,因为这个项目只是为了学习如何管理数据库连接
标签: php mysql database oop pdo