gpt4 book ai didi

php - 通过 php 中的函数使用 sql 访问数据库的最智能方法

转载 作者:行者123 更新时间:2023-11-29 21:37:24 25 4
gpt4 key购买 nike

我正在制作一个小型 CMS,以供娱乐和练习。我遇到过这个问题,我必须在不同的函数中多次访问数据库。我现在通过使用代码创建一个新的准备好的语句以及在函数中访问数据库的所有内容似乎不太方便,因为代码非常重复,而且我为每个函数使用的代码几乎相同。那么我该如何创建一个类或一些函数来减少从数据库收集信息的函数中使用的代码量呢?我目前在 SQL 中使用以下查询

  • 选择
  • 更新
  • 插入
  • 删除

所以主要是基本的。我使用的代码是基本的 PHP 代码,我使用准备好的语句来访问我的数据库,如下所示:

// Create database connection
$con = db_connect();

// Initialize $error variable for errors
$error = "";

if ($stmt = $con->prepare("SELECT * FROM profiles WHERE username = ?")) {
// Bind the $username variable to the parameter in the query
$stmt->bind_param('s', $username);

// Execute the prepared query
$stmt->execute();
$stmt->store_result();

// Assign the data recieved from the database (if any)
$stmt->bind_result($data);
$stmt->fetch();
if ($stmt->num_rows == 1) {
if (!empty($stmt->error)) {
printf("Error: %s.\n", $stmt->error);
return false;
}
// Query successful

} else {
$error .= "User doesn't exist";
return false;
}
} else {
$error .= 'Could not connect to database';
return false;
}

对我来说,这似乎是非常容易使用的代码,但是当您必须一次又一次地将其粘贴到不同的函数中时,就会有点令人沮丧。

最佳答案

您应该使用依赖注入(inject)。

通过将数据库连接注入(inject)到配置文件的类中,您可以更灵活地做您想做的事情。

  • 您可以将该数据库更改为您想要的任何数据库(MongoDB、Cassandra、MySQL)。
  • 您仅声明一次连接;性能更好更快
  • 使测试和开发变得更加容易(echo 和 print_r 以及单元测试)
  • 亨德尔有 1 处异常(exception)
  • 数据库与其余代码松散耦合。

例如:

class Profile {

private $db = null;

public function __construct($db Database) {
$this->db = $db;
}

public function getProfile() {
//ish....
$this->db->query("SELECT * FROM profiles WHERE username = ?");

}

public function insert() {
...
}

public function update() {
...
}

public function delete() {
...
}

}

要访问数据库,我会执行类似的操作并实现您所拥有的内容(准备好的语句很棒!):

class Database {

private $conn = null;

public function __construct($db Database) {

$this->conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);

$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

return $this->conn;

}

public function query($sql) {

try {

return $conn->query($sql);

} catch (Exception $e) {

echo $e->getMessage();

}

}

}

可以在这里找到非常好的解释和教程:http://code.tutsplus.com/tutorials/dependency-injection-huh--net-26903

关于php - 通过 php 中的函数使用 sql 访问数据库的最智能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com