1 回答
TA贡献1856条经验 获得超17个赞
在目前的状态下,它对你来说根本没有用处。mysqli 连接始终是相同的三行代码,没有必要为其添加类。
要使用 mysqli 连接到数据库,请使用:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'db_name');
$mysqli->set_charset('utf8mb4'); // always set the charset
然后你可以编写一个类,它将数据库连接作为参数__construct()。
class Test {
private \mysqli $db = null;
public function __construct(\mysqli $db) {
$this->db = $db;
}
function runQuery($sql) {
$query = $this->db->query($sql);
}
}
就是这样。尽管您确实应该尝试创建一个更有用的 mysqli 抽象类,或者更好,但使用 PDO 代替。如果你想编写 mysqli 包装类,你可以从以下想法开始(根据你的需要进行调整):
class DBClass extends mysqli {
public function __construct($host = null, $username = null, $passwd = null, $dbname = null, $port = null, $socket = null) {
// Enable error reporting and call mysqli constructor
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
$this->set_charset('utf8mb4'); // always set the proper charset which should be utf8mb4 99.99% of the time
}
public function safeQuery(string $sql, array $params = []): ?array {
// Prepare statement:
$stmt = $this->prepare($sql);
// If the statement has parameters then bind them all now
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
// Execute it and get results if there are any
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
// If the query was INSERT or UPDATE then return null
return null;
}
}
然后,即使使用 mysqli,您也可以用简单的一行执行任何 SQL 语句。
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报