PHP和MySQL-常量、函数、最佳实践?
我已经使用PHP和MySQL很多年了,但从未在正式环境中使用过。我用它来简化我的工作,并编写了许多我自己的商业网站,但我没有被聘为程序员,也从来没有被雇佣过。我希望开始做一些自由职业者的工作,我想知道一些最佳实践是什么 我总是使用getter类从mysql检索数据,setter类将数据输入mysql,我将连接类传递给mysql。每个mySQL表和字段名都在常量包含文件中定义了自己的常量。不过,我通常要做的是将常量直接输入setter或getter类,而不是将它们作为变量传递。这样做会使生活变得更简单、更快,但它确实违背了我对类中函数应该是独立函数的理解 为了清楚起见,这是我通常做的一个例子: 常数公司PHP和MySQL-常量、函数、最佳实践?,php,mysql,Php,Mysql,我已经使用PHP和MySQL很多年了,但从未在正式环境中使用过。我用它来简化我的工作,并编写了许多我自己的商业网站,但我没有被聘为程序员,也从来没有被雇佣过。我希望开始做一些自由职业者的工作,我想知道一些最佳实践是什么 我总是使用getter类从mysql检索数据,setter类将数据输入mysql,我将连接类传递给mysql。每个mySQL表和字段名都在常量包含文件中定义了自己的常量。不过,我通常要做的是将常量直接输入setter或getter类,而不是将它们作为变量传递。这样做会使生活变得更
define('TABLE_NAME','table_name');
dbase_getters.class.php
public function get_data($connection){
$query = "SELECT * FROM " . TABLE_NAME;
$result = $connection etc...
}
public function get_data($connection, $table_name){
$query = "SELECT * FROM " . $table_name;
result = $connection etc...
}
还是我应该这样做
dbase_getters.class.php
public function get_data($connection){
$query = "SELECT * FROM " . TABLE_NAME;
$result = $connection etc...
}
public function get_data($connection, $table_name){
$query = "SELECT * FROM " . $table_name;
result = $connection etc...
}
通过传递变量似乎要麻烦得多,特别是如果我想通过添加新字段来搜索来更改函数的参数,我必须找到函数调用的每个实例并更改它们,而如果我使用常量,我只需要将它们添加到函数中
此外,当涉及到诸如声明常量之类的事情时,我总是使用单引号。但是当我创建字符串时,我总是使用双引号。这是否不一致,我是否应该一直使用一种类型的报价
谢谢 当然,你可以两种方法都做,我认为这两种方法都是不可取的。动态创建SQL字符串既难以确保安全,也容易出错 我建议您尝试许多现成的库中的一个,例如: 这些就是所谓的“ORM”——对象关系映射器。这些将帮助你实现你——我相信——正在努力实现的目标 还有其他方法,我曾经使用过PEARDB(现在是MDB2),它的级别没有ORM高。这也将帮助您解决设计问题
数据库访问是一个需要解决的常见问题,许多人以前都做过,使用他们已经发现的内容,而不是重新发明轮子!尝试使用ORM。它非常令人满意,而且比处理SQL、行、结果集和连接对象自然得多。当然,您可以用两种方法来处理,我认为这两种方法都不可取。动态创建SQL字符串既难以确保安全,也容易出错 我建议您尝试许多现成的库中的一个,例如: 这些就是所谓的“ORM”——对象关系映射器。这些将帮助你实现你——我相信——正在努力实现的目标 还有其他方法,我曾经使用过PEARDB(现在是MDB2),它的级别没有ORM高。这也将帮助您解决设计问题 数据库访问是一个需要解决的常见问题,许多人以前都做过,使用他们已经发现的内容,而不是重新发明轮子!尝试使用ORM。它非常令人满意,比处理SQL、行、结果集和连接对象更自然。要使用MVC术语。。。包含所有业务逻辑的模型应该在某个地方有一个明确定义的函数,用于从数据库中获取特定类型的数据。比如说,像这样:
function getUserByUsername($username) {
$query = 'SELECT ... FROM users WHERE name = :username';
...
return $user;
}
通过用户名从数据库中检索用户是应用程序可以执行的一个特定、唯一的操作。为它做一个函数。它使你的应用程序更加结构化。不要做一个通用的SQL包装器,并向它传递大量不同的变量,这只会不必要地将数据库逻辑扩散到整个应用程序中。要使用MVC术语。。。包含所有业务逻辑的模型应该在某个地方有一个明确定义的函数,用于从数据库中获取特定类型的数据。比如说,像这样:
function getUserByUsername($username) {
$query = 'SELECT ... FROM users WHERE name = :username';
...
return $user;
}
通过用户名从数据库中检索用户是应用程序可以执行的一个特定、唯一的操作。为它做一个函数。它使你的应用程序更加结构化。不要做一个通用的SQL包装器,并向它传递大量不同的变量,这只会不必要地将数据库逻辑扩散到应用程序中。使用自己的框架仅限于自己的知识范围, 我建议使用
mvc框架
大多数主机和所需框架是:
cakephp
,以下是工作原理:
如果您习惯于使用一个mvc,那么其他人就不适合您。使用自己的框架仅限于自己的知识线, 我建议使用
mvc框架
大多数主机和所需框架是:
cakephp
,以下是工作原理:
如果您习惯于使用一个
mvc
,那么其他的就不适合您了。我喜欢的最佳实践是创建一个数据库类,其中包含执行数据库查询的方法。。这些是我使用的一系列函数,它们是实现基本插入选择和更新的简单方法。这是PDO的示例
public function select($table, $fields, $where = ""){
try{
$fields = implode(",", $fields);
$stmt = $this->connection->prepare("SELECT {$fields} from {$table} {$where}");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}catch(PDOException $p){
Error::PDOError($p->getCode(), $p->getMessage());
}
}
public function insert($table, $data) {
$fields = implode(",", array_keys($data));
$values = implode(",", array_values($data));
$stmt = $this->prepare("INSERT INTO " . $table . "({$fields}) VALUES ({$values})");
return $stmt->execute();
}
public function update($table, $data, $where) {
$fieldValues = NULL;
foreach ($data as $key => $value) {
$fieldValues .= "$key = :$key,";
}
$fieldValues = rtrim($fieldValues, ",");
$stmt = $this->prepare("UPDATE {$table} SET {$fieldValues} WHERE {$where}");
foreach ($data as $key => $value) {
$stmt->bindValue(":$key", $value);
}
return $stmt->execute();
}
或者您可以始终使用我喜欢的最佳实践是创建一个数据库类,其中包含执行数据库查询的方法。。这些是我使用的一系列函数,它们是实现基本插入选择和更新的简单方法。这是PDO的示例
public function select($table, $fields, $where = ""){
try{
$fields = implode(",", $fields);
$stmt = $this->connection->prepare("SELECT {$fields} from {$table} {$where}");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}catch(PDOException $p){
Error::PDOError($p->getCode(), $p->getMessage());
}
}
public function insert($table, $data) {
$fields = implode(",", array_keys($data));
$values = implode(",", array_values($data));
$stmt = $this->prepare("INSERT INTO " . $table . "({$fields}) VALUES ({$values})");
return $stmt->execute();
}
public function update($table, $data, $where) {
$fieldValues = NULL;
foreach ($data as $key => $value) {
$fieldValues .= "$key = :$key,";
}
$fieldValues = rtrim($fieldValues, ",");
$stmt = $this->prepare("UPDATE {$table} SET {$fieldValues} WHERE {$where}");
foreach ($data as $key => $value) {
$stmt->bindValue(":$key", $value);
}
return $stmt->execute();
}
或者您可以始终使用来定义常量,我使用与OP相同的方法 我建议您为持久层研究以下模式: <