最近我发现自己在使用 DataTables 并且需要更复杂的 JOIN 和 WHERE 子句,而原始 ssp.class.php 不支持。因此,我修改了原始文件并稍微更改了 API,以提供一个表格,为我提供所需的灵活性。我将“SSP::simple”和“SSP::complex”的功能组合成一个名为“SSP::process”的函数。
由于脚本篇幅较长,我把它放到了pastebin.com这里:ssp.class.php
还有一个我如何使用它的简单示例:
private function get_recent_payments() {
global
$pdoHost, $pdoUser,
$pdoPass, $pdoDatabase;
// SQL server connection information
$sql_details = array(
'user' => $pdoUser,
'pass' => $pdoPass,
'db' => $pdoDatabase,
'host' => $pdoHost
);
// DataTables server-side processing
require_once('ssp.class.php');
$options = [
'table' => 'payments',
'alias' => 'l',
'primaryKey' => 'id',
'columns' => [
[ 'db' => 'id', 'dt' => 0 ],
[
'db' => 'client_id',
'dt' => 1,
'join' => [
'table' => 'clients',
'on' => 'id',
'select' => 'first_name',
'alias' => 'c',
'as' => 'fname',
]
],
[
'db' => 'client_id',
'dt' => 2,
'join' => [
'table' => 'clients',
'on' => 'id',
'select' => 'last_name',
'alias' => 'c'
]
],
[ 'db' => 'pay_date', 'dt' => 3 ]
],
'where' => [
[
'db' => 'client_id',
'op' => '!=',
'value' => $_SESSION['client_id']
]
]
];
$this->response(SSP::process($_REQUEST, $sql_details, $options));
}
选项数组的“where”和“whereResult”(详见“SSP::complex”)子句也可能有一个“别名”来引用连接表中的列。
传递给服务器的示例 SQL 查询:
SELECT l.`id`, c.`first_name` AS 'fname', c.`last_name`, l.`pay_date`
FROM `payments` l
JOIN `clients` c ON (c.`id` = l.`client_id`)
WHERE l.`client_id` != :binding_0
ORDER BY l.`pay_date` DESC
LIMIT 0, 5
我采用结构化数组路线,因为这使我能够构建查询,同时使用反引号和绑定语句参数保持查询的刚性。我发布这篇文章是希望其他人会发现它和我一样有用。