db类
<h1>获取DB类对象</h1>
<ul>
<li><strong>单例模式</strong>
Init()方法获取的是DB类的单例,不管在什么地方、多少次使用Init()方法,始终获取的是同一个DB类对象
一般情况下,只需要使用Init()方法获取DB类对象即可</li>
<li><strong>获取多个DB类对象</strong>
只需要 new 几个就可以了
<strong>在init() 或者 new 的时候可以传入数据库的连接参数,格式同配置文件的 DB 字段</strong>
<pre><code>$db = \ext\db::Init(); //单例模式
$db1 = new \ext\db('table'); //传入数据表名
$db2 = new \ext\db('table', $config); //传入数据表名和连接参数</code></pre></li>
</ul>
<h1>一些基本操作</h1>
<ul>
<li><strong>获取数据表名前缀 GetPrefix()</strong>
<pre><code>$fix = $db->GetPrefix();</code></pre></li>
<li><strong>获取错误信息 GetError()</strong>
<pre><code>$err = $db->GetError();</code></pre></li>
<li><strong>指定或者切换数据表 Table()</strong>
<pre><code>$db->Table('user');
$db->Table('user a'); //同时指定别名</code></pre></li>
<li><strong>获取 db 类的 pdo 对象</strong>
<pre><code>$pdo = $db->PDO;</code></pre></li>
<li><strong>获取执行的 sql 语句 PDO->GetSql()</strong>
<pre><code>$db->PDO->GetSql();</code></pre></li>
</ul>
<h1><a href="http://z-php.com/doc-17"><font color=red>Where 条件相关请参照上一版文档</font></a></h1>
<h1>写入相关的操作</h1>
<ul>
<li>
<p><strong>添加数据 Insert()</strong>
数组 $data 键=>值 和数据表 字段=>值 对应</p>
<pre><code>$data['code'=>1, 'name'=>'name'];
$id = $db->Insert($data);
// 第二个参数为true,当主键重复时不执行操作
$id = $db->Insert($data, true);</code></pre>
</li>
<li>
<p><strong>批量添加数据 BatchInsert()</strong>
<strong><font color=red>此方法不执行数据验证</font></strong>
$keys 是要插入的数据字段,顺序和数组$data成员数据的顺序相对应
$data 是一个二维数组,成员数据的顺序和$keys的顺序相对应
返回成功插入数据的行数</p>
<pre><code>$keys = ['id', 'tid', 'mark'];
$data = [
[1, 2, ''],
[2, 3, ''],
[3, 5, ''],
];
$rows = $db->BatchInsert($keys, $data);
// 第三个参数为true,当主键重复时不执行操作
$rows = $db->BatchInsert($keys, $data, true);</code></pre>
</li>
<li>
<p><strong>更新数据 Update()</strong>
<strong>支持 Join关联</strong>
数组 $data 键=>值 和数据表 字段=>值 对应
<strong>参数值被{{ }}包裹,会当作sql来执行,不做数据绑定
<font color=red>{{ }}里含有的参数变量需要自己检查是否是期望值,否则会有SQL注入风险</font></strong></p>
<pre><code>$data['code'=>1, 'name'=>'name'];
$result = $db->Where(['id'=>1])->Update($data); //通过where条件指定 id 是1的数据行
// 参数值被{{}}包裹,会当作sql来执行,不做数据绑定
$save = ['num'=>'{{num + 10}}']; // num字段值增加10
$result = $db->Where(['id'=>1])->Update($save);</code></pre>
</li>
<li>
<p><strong>删除数据 Delete()</strong>
<strong>支持 Join关联</strong></p>
<pre><code>$result = $db->Where(['id'=>1])->Delete(); //通过where条件指定 id 是1的数据行</code></pre>
</li>
<li>
<p><strong>有则更新无则插入 IfUpdate()</strong>
<font color=red>返回值
-1: 执行了update操作;
0: 没有变更;
其它: 新增数据行的主键值
</font></p>
<pre><code>$data['id'=>1, 'name'=>'name'];
$result = $db->IfUpdate($data);
// 如果要更新的字段有所不同:
$update = ['nickname'=>'nickname']; //指定要更新的数据
$result = $db->IfUpdate($data, $update);</code></pre>
</li>
</ul>
<h1>查询相关的操作</h1>
<ul>
<li>
<p><strong>查询一条数据 Find()</strong></p>
<pre><code>$row = $db->Where($where)->Find();
$name = $db->Where($where)->Find('name'); // 查询一条数据中的一列
// 第二个参数为true:锁定数据行,事务处理中才有效
$name = $db->Where($where)->Find('', true);</code></pre>
</li>
<li>
<p><strong>查询多条数据 Select()</strong></p>
<pre><code>$rows = $db->Where($where)->Select();
$name = $db->Where($where)->Select('name'); // 查询多条数据中的一列
// 第二个参数为true:锁定数据行,事务处理中才有效
$name = $db->Where($where)->Select('', true);</code></pre>
</li>
<li>
<p><strong>查询总数据量 Count()</strong></p>
<pre><code>$number = $db->Where($where)->Count();</code></pre>
</li>
<li>
<p><strong>限制返回的数据量 Limit()</strong></p>
<pre><code>$rows = $db->Where($where)->Limit(10)->Select();
$rows = $db->Where($where)->Limit('100, 10')->Select();</code></pre>
</li>
<li>
<p><strong>设置查询字段 Filed()</strong></p>
<pre><code>$rows = $db->Field('id, name')->Where($where)->select();
$rows = $db->Field('id, name, SUM(`point`) AS point')->Where($where)->select();</code></pre>
</li>
<li>
<p><strong>关联查询 Join()</strong></p>
<pre><code>$where = "a.id > 10";
$join = 'LEFT JOIN info b ON a.id=b.id';
$rows = $db->table('user a')->Join($join)->Where($where)->Select();
//支持多个join组合成数组:
$join[] = 'LEFT JOIN info b ON a.id=b.id';
$join[] = 'LEFT JOIN bill c ON c.uid=b.uid';
// ... 更多的join</code></pre>
</li>
<li>
<p><strong>排序 Order()</strong></p>
<pre><code>$rows = $db->Where($where)->Order('uid DESC')->Select();</code></pre>
</li>
<li>
<p><strong>分组查询 Group()</strong></p>
<pre><code>$rows = $db->field($field)->Where($where)->Group('uid')->Select();</code></pre>
</li>
<li>
<p><strong>聚合条件过滤 Having()</strong>
<strong>Having() 参数跟 Where() 相同</strong></p>
<pre><code>$where = "id > 10";
$having = 'num > 100';
$rows = $db->Field('uid, SUM(num) AS num')->Group('uid')->Having($having)->Where($where)->Select();</code></pre>
</li>
<li><strong>数据分页 Page()</strong>
<pre><code>$conf = ['num' => $num, 'p' => $p, 'return' => true];
$data = $db->where($where)->Page($conf)->Select();
$page = $db->GetPage();</code></pre>
<p><strong>参数说明</strong></p></li>
</ul>
<table>
<thead>
<tr>
<th>字段</th>
<th>类型</th>
<th>说明</th>
<th>默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td>p</td>
<td>int</td>
<td>页码</td>
<td>1</td>
</tr>
<tr>
<td>var</td>
<td>string</td>
<td>页码参数名(生成分页链接用)</td>
<td>p</td>
</tr>
<tr>
<td>num</td>
<td>int</td>
<td>每页数据量</td>
<td>10</td>
</tr>
<tr>
<td>max</td>
<td>int</td>
<td>最大页码数</td>
<td>0:不限制</td>
</tr>
<tr>
<td>inrange</td>
<td>bool</td>
<td>强制页码在合法范围(超出实际最大分页数时返回最后一页的数据)</td>
<td>true</td>
</tr>
<tr>
<td>rolls</td>
<td>int</td>
<td>生成的页码链接数量(生成分页链接用)</td>
<td>10</td>
</tr>
<tr>
<td>ver</td>
<td>string</td>
<td>版本号</td>
<td>当前版本号,生成a链接用</td>
</tr>
<tr>
<td>mod</td>
<td>int</td>
<td>url模式</td>
<td>当前模式,生成a链接用</td>
</tr>
<tr>
<td>nourl</td>
<td>string</td>
<td>空链接的地址</td>
<td>javascript:;,生成a链接用</td>
</tr>
<tr>
<td>return</td>
<td>array</td>
<td>需要返回的参数: [prev, next, first, last, list]<br>分别代表:上一页,下一页,第一页,最后一页,页码链接的数组</td>
<td>无</td>
</tr>
</tbody>
</table>
<p><strong>如果不需要分页的具体链接,可将return字段设为 true,默认返回以下字段:</strong></p>
<table>
<thead>
<tr>
<th>字段</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>num</td>
<td>int</td>
<td>每页数据量</td>
</tr>
<tr>
<td>pages</td>
<td>int</td>
<td>总分页数</td>
</tr>
<tr>
<td>rows</td>
<td>int</td>
<td>总数据量</td>
</tr>
<tr>
<td>r</td>
<td>int</td>
<td>当前页的数据量</td>
</tr>
<tr>
<td>p</td>
<td>int</td>
<td>页码</td>
</tr>
</tbody>
</table>