whmcs 系统下的 CURD 操作

本贴最后更新于 2723 天前,其中的信息可能已经事过境迁

论如何通过 whmcs 自带的模块进行数据库交互

前提

首先,我们并不需要额外的去建立对数据库的连接,因为大多数情况下(即使是在插件下面),whmcs 都已经帮我们把数据库的连接建立起来了,所以只需要直接包含跟数据库进行交互的类即可。

use WHMCS\Database\Capsule;

Query

在 whmcs 系统下,因为它是直接将 Laravel 的数据库模块独立出来,所以我们也可以直接按照 Laravel 下面的 Query 来写,Laravel 的相关文档:Laravel’s query documentation,下面直接上代码:

批量查询、再更具条件来更新用户表的用户名称:

<?php

use WHMCS\Database\Capsule;

// Print all client first names using a simple select.

/** @var stdClass $client */
foreach (Capsule::table('tblclients')->get() as $client) {
	echo $client->firstname . PHP_EOL;
}

// Rename all clients named "John Deo" to "John Doe" using an update statement.
try {
	$updatedUserCount = Capsule::table('tblclients')
		->where('firstname', 'John')
		->where('lastname', 'Deo')
		->update(
			[
				'lastname' => 'Doe',
			]
		);

	echo "Fixed {$updatedUserCount} misspelled last names.";
} catch (\Exception $e) {
	echo "I couldn't update client names. {$e->getMessage()}";
}

order 和 limit

Capsule::table('tblknowledgebase')->select('order','title' , 'article')->orderBy('order' , 'desc')->skip(0)->take(6)->get()

Schema

使用 schema 方法,我们可以通过脚本来进行表格的创建,这个在写模块的时候经常会用到。

<?php

use WHMCS\Database\Capsule;

// Create a new table.
try {
	Capsule::schema()->create(
		'my_table',
		function ($table) {
			/** @var \Illuminate\Database\Schema\Blueprint $table */
			$table->increments('id');
			$table->string('name');
			$table->integer('serial_number');
			$table->boolean('is_required');
			$table->timestamps();
		}
	);
} catch (\Exception $e) {
	echo "Unable to create my_table: {$e->getMessage()}";
}

PDO

基本通过 query 就可以实现所有 CURD 操作,但是呢,实际应用过程中,还要考虑执行 sql 失败的情况,这个时候就需要用到回滚操作了。

下面来一个插入数据,如果失败执行回滚的例子:

<?php

use WHMCS\Database\Capsule;

// Perform potentially risky queries in a transaction for easy rollback.
$pdo = Capsule::connection()->getPdo();
$pdo->beginTransaction();

try {
    $statement = $pdo->prepare(
        'insert into my_table (name, serial_number, is_required) values (:name, :serialNumber, :isRequired)'
    );

    $statement->execute(
        [
            ':name' => $_POST['name'],
            ':serialNumber' => $_POST['serialNumber'],
            ':isRequired' => (bool) $_POST['isRequired'],
        ]
    );

    $pdo->commit();
} catch (\Exception $e) {
    echo "Uh oh! {$e->getMessage()}";
    $pdo->rollBack();
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...