论如何通过 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(); }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于