數據基本操作
有調系統數據庫操作使用 PDO 兼容方式,以參數綁定的形式進行查詢操作。
系統已對 PDO 兼容性進行檢測及封裝。下面具體說明一下數據庫的幾種基本操作方法。
tablename()
為了防止有調系統的表與其它系統命名沖突,有調均會指定一個表前綴,在寫SQL語句時,需要將表名稱附加上表前綴。可以使用 tablename() 函數。
~~~
$sql = "SELECT * FROM ".tablename('users');
echo $sql;
~~~
//輸出 SELECT * FROM ims_users
范圍條件操作
在有調的版本中,增加了pdo_get、pdo_getall、pdo_getcolumn、pdo_getslice、pdo_insert、pdo_update、pdo_delete的范圍條件的支持,具體支持的范圍操作符如下:
`array('>', '<', '<>', '!=', '>=', '<=', 'NOT IN', 'not in', '+=', '-=');`
字段名與操作符組成條件數組的鍵名,字段名與操作符中間間隔一個空格,具體使用方法如下:
~~~
~~~
//獲取acid大于269的公眾號
$account = pdo_get('account', array('acid >' => '269'));
~~~
~~~
//增加一次用戶的錯誤登錄次數,兩次變為2即可
`pdo_update('users_failed_login', array('count +=' => 1), array('username' => 'mizhou'));`
查詢
查詢是數據庫操作中使用最頻繁的操作,有調系統封裝了一些函數適用于不同的場景,以下逐個說明
pdo_get
根據條件(AND連接)到指定的表中獲取一條記錄
$tablename 參數指定要查詢的數據表名,此處傳入的表名不要使用tablename()函數
$condition 參數指定查詢的條件,以是 AND 連接,支持大于,小于等范圍條件。具體使用查看本章節第二段范圍條件操作
$fields 參數指定查詢返回的字段列表
`array | boolean pdo_get($tablename, $condition = array(), $fields = array());`
示例:
~~~
//根據uid獲取用戶的用戶名和用戶Id信息
//生成的SQL等同于:SELECT username, uid FROM ims_users WHERE uid = '1' LIMIT 1
$user = pdo_get('users', array('uid' => 1), array('username', 'uid'));
//生成的SQL等同于:SELECT username FROM ims_users WHERE username = 'mizhou' AND status = '1' LIMIT 1
$user = pdo_get('users', array('username' => 'mizhou', 'status' => 1), array('username'));
pdo_getcolumn
~~~
根據條件(AND連接)到指定的表中獲取一條記錄的指定字段
$tablename 參數指定要查詢的數據表名,此處傳入的表名不要使用tablename()函數
$condition 參數指定查詢的條件,以是 AND 連接,支持大于,小于等范圍條件.。具體使用查看本章節第二段范圍條件操作
$field 參數指定查詢返回的字段
string | int pdo_getcolumn($tablename, $condition = array(), $field);
示例:
~~~
//根據uid獲取用戶的用戶名
//生成的SQL等同于:SELECT username FROM ims_users WHERE uid = '1' LIMIT 1
$username = pdo_getcolumn('users', array('uid' => 1), 'username');
pdo_getall
~~~
根據條件(AND連接)到指定的表中獲取全部記錄
$condition 參數指定查詢的條件,以是 AND 連接,支持大于,小于等范圍條件.。具體使用查看本章節第二段范圍條件操作
$keyfield 參數傳入一個已存在的字段名稱,結果數組鍵值就為該字段,否則為自然排序
其它參數同pdo_get函數
array | boolean pdo_getall($tablename, $condition = array(), $fields = array(), $keyfield = '') {
示例:
~~~
//獲取全部啟用的用戶
//生成的SQL等同于:SELECT * FROM ims_users WHERE status = '1'
$user = pdo_get('users', array('status' => 1));
pdo_getslice
~~~
根據條件(AND連接)到指定的表中獲取某個區間的記錄,此函數和 pdo_getall 的區別是可以指定limit 值
$condition 參數指定查詢的條件,以是 AND 連接,支持大于,小于等范圍條件.。具體使用查看本章節第二段范圍條件操作
$limit 參數指定查詢語句的LIMIT值,array(start, end) 或是直接傳入范圍 2,3
$total 參數指定查詢結果的總條數,方便進行分頁操作
array | boolean pdo_getslice($tablename, $condition = array(), $limit = array(), &$total = null, $fields = array(), $keyfield = '')
示例:
~~~
$user = pdo_getslice('users', array(), array(0, 10), $total);
echo $total;
pdo_fetch
~~~
根據SQL語句,查詢一條記錄
$sql 參數指定要返回記錄集的SQL語句
$params 參數指定為SQL語句中的參數綁定傳值,防止SQL注入
需要注意的是使用參數綁定時,SQL語中等號后不需要使用引號,傳入的值必須與綁定的名稱一致
array | boolean pdo_fetch($sql, $params = array());
示例:
// :uid 是參數的一個占位符,沒有使用引號,傳入的第二個參數中要與SQL中的占位名稱相同
$user = pdo_fetch("SELECT username, uid FROM ".tablename('users')." WHERE uid = :uid LIMIT 1", array(':uid' => 1));
// LIKE 占位的使用方法
$user = pdo_fetch("SELECT * FROM ".tablename('users')." WHERE username LIKE :username", array(':username' => '%mizhou%'));
pdo_fetchcolumn
根據SQL語句,查詢第一條記錄的第N列的值,此語句與 pdo_fetch 使用相同,只是此函數返回的不是一個數組而是一個字符串
$column 參數指定返回記錄集的第幾列數據
string | boolean pdo_fetchcolumn($sql, $params = array(), $column = 0)
示例:
// 獲取用戶的總數,返回的值是一個數字
$user_total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('users'));
pdo_fetchall
根據SQL語句,查詢全部記錄,使用方法與pdo_fetch相同
array | boolean pdo_fetchall($sql, $params = array(), $keyfield = '')
示例:
// 需要注意的是,返回的數組的鍵值為用戶的uid
$user = pdo_fetchall("SELECT username, uid FROM ".tablename('users'), array(), 'uid');
變更
以下說明插入,更新,刪除操作的幾個函數。
pdo_insert
對指定數據表插入一條新記錄
$tablename 參數指定要插入記錄的數據表名,此處傳入的表名不要使用tablename()函數
$data 參數指定要插入的記錄,格式為與數據表字段對應的關聯數組
$replace 參數指定插入方式使用 INSERT 語句或是 REPLACE 語句(查找到主鍵相同的數據選擇update)
int | boolean pdo_insert($tablename, $data = array(), $replace = false)
示例:
~~~
//添加一條用戶記錄,并判斷是否成功
$user_data = array(
'username' => 'mizhou1',
'status' => '1',
);
$result = pdo_insert('users', $user_data);
if (!empty($result)) {
$uid = pdo_insertid();
message('添加用戶成功,UID為' . $uid);
}
pdo_update
~~~
更新指定的數據表的記錄
$glue 參數指定前面 $condition 數組條件的關聯字 AND 或是 OR
array | boolean pdo_update($tablename, $data = array(), $condition, $glue = 'AND')
示例:
~~~
//更uid等于2的用戶的用戶名
$user_data = array(
'username' => 'mizhou2',
);
$result = pdo_update('users', $user_data, array('id' => 2));
if (!empty($result)) {
message('更新成功');
}
pdo_delete
~~~
刪除指定條件的數據
int | boolean pdo_delete($tablename, $condition = array(), $glue = 'AND')
示例:
~~~
//刪除用戶名為mizhou2的記錄
$result = pdo_delete('users', array('username' => 'mizhou2'));
if (!empty($result)) {
message('刪除成功');
~~~
}
運行SQL
當更新,插入,刪除無法滿足時,可以直接構造SQL語句進行操作
pdo_query
運行一條SQL語句
$params 指定SQL語句中綁定參數的值,參數占位與 pdo_fetch 一致
int | boolean query($sql, $params = array())
示例:
~~~
//更uid等于2的用戶的用戶名
$result = pdo_query("UPDATE ".tablename('users')." SET username = :username, age = :age WHERE uid = :uid", array(':username' => 'mizhou2', ':age' => 18, ':uid' => 2));
//刪除用戶名為mizhou2的記錄
$result = pdo_query("DELETE FROM ".tablename('users')." WHERE uid = :uid", array(':uid' => 2));
if (!empty($result)) {
message('刪除成功');
}
pdo_run
~~~
批量執行SQL語句
$stuff 函數將會將此參數指定的值,替換為當前系統的表前綴。
注:與pdo_query不同的是,pdo_run是可以一次執行多條SQL語句,每條SQL必須以;分隔。
boolean run($sql, $stuff = 'ims_')
示例:
~~~
$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `ims_multisearch` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`weid` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `ims_multisearch_fields` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`reid` int(10) unsigned NOT NULL,
`type` tinyint(1) unsigned NOT NULL DEFAULT '1',
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_reid` (`reid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
EOF;
~~~
pdo_run($sql);
輔助函數
pdo_fieldexists
檢查表中是否存在某個字段
$tablename 參數指定要檢查的表名稱
$fieldname 參數指定要檢查是否存在的字段名
boolean pdo_fieldexists($tablename, $fieldname)
示例:
~~~
//如果shopping_goods表中不存在credit字段,則新增credit字段
if(!pdo_fieldexists('shopping_goods', 'credit')) {
pdo_query("ALTER TABLE ".tablename('shopping_goods')." ADD `credit` int(11) NOT NULL DEFAULT '0';");
}
pdo_indexexists
~~~
檢查表中是否存在某個索引
$tablename 參數指定要檢查的表名稱
$indexname 參數指定要檢查是否存在的索引名
boolean pdo_indexexists($tablename, $indexname)
示例:
~~~
//如果site_slide表中不存在multiid索引,則新增multiid索引
if (!pdo_indexexists('site_slide', 'multiid')) {
pdo_query("ALTER TABLE ".tablename('site_slide')." ADD INDEX `multiid` (`multiid`);");
}
pdo_tableexists
~~~
檢查數據庫中是否存在某個表
boolean pdo_tableexists($tablename)
pdo_debug
調試運行SQL語句,顯示執行過的SQL的棧情況
$output 參數指定是否直接打印出調試信息
array debug($output = true, $append = array())
示例:
~~~
pdo_debug();
//調用該函數結果如下
Array
(
[0] => Array
(
[sql] => SET NAMES 'utf8';
[error] => Array
(
[0] => 00000
[1] =>
[2] =>
)
)
[1] => Array
(
[sql] => SELECT `value` FROM `ims_core_cache` WHERE `key`=:key
[params] => Array
(
[:key] => setting
)
[error] => Array
(
[0] => 00000
[1] =>
[2] =>
)
)
)
~~~
- 有調使用需知
- 有調商城使用條件
- 有調商城新手快速入門
- 公眾平臺綁定
- 網頁授權獲取信息
- 回調域名與JS接口
- 【七牛存儲】設置功能說明
- 如何設置商城權限管理
- 【分類層級】功能說明
- 【設置入口】功能說明
- 【會員設置】功能說明
- 【模板消息庫】功能說明
- 【消息提醒】功能說明
- 【支付方式】功能說明
- 【商城交易設置】功能說明
- 【商城關閉設置】功能說明
- 【商城關注及分享】功能說明
- 【商城基礎設置】功能說明
- 【自定義表單】功能說明
- 【快遞助手】功能說明
- 【淘寶助手】功能說明
- 【活動海報】功能說明
- 【超級海報】功能說明
- 【分銷樣式/文字】功能說明
- 【分銷—小店】功能說明
- 分銷中心功能說明
- 分銷商升級功能說明
- 【分銷—結算】功能說明
- 【分銷—上下線關系及分銷資格】功能說明
- 【分銷—基礎基本設置】功能說明
- 【分銷—入口設置】功能說明
- 分銷—排行榜設置功能說明
- 【分銷—無效的】功能說明
- 【分銷—已打款的】功能說明
- 【分銷 —待打款的】功能說明
- 【分銷— 待審核的】功能說明
- 【分銷—分銷商等級】功能說明
- 【分銷—分銷商增長趨勢統計】功能說明
- 【分銷—分銷商管理】功能說明
- 【數據會員統計】功能說明
- 【數據商品統計】功能說明
- 【數據銷售統計】功能說明
- 【財務下載對賬單】功能說明
- 【財務提現申請】功能說明
- 【財務充值記錄】功能說明
- 【營銷—優惠券設置】功能說明
- 【營銷—優惠券發放記錄】功能說明
- 【營銷—優惠券分類】功能說明
- 【營銷—優惠券管理】功能說明
- 【營銷—充值優惠】功能說明
- 【營銷—滿額包郵】功能說明
- 【營銷—滿額立減】功能說明
- 【營銷—抵扣設置】功能說明
- 【訂單批量發貨】功能說明
- 【訂單自定義導出】功能說明
- 【訂單維權】功能說明
- 【全部訂單】功能說明
- 【訂單已關閉】功能說明
- 【訂單已完成】功能說明
- 【訂單待付款】功能說明
- 【訂單待收貨】功能說明
- 【虛擬卡管理】功能說明
- 【訂單待發貨】功能說明
- 【訂單列表】概述功能說明
- 【會員消息】群發功能說明
- 【會員排行榜】功能說明
- 【會員分組】功能說明
- 【會員等級】功能說明
- 【會員管理】功能說明
- 【商品添加】功能說明
- 【商品管理】功能說明
- 【O2O插件】功能說明
- 【首頁管理】功能說明
- 【商城管理】功能說明
- 文章營銷】功能說明
- 有調商城常見問題
- 客服消息推送以及模板消息推送的區別
- 快遞助手使用手冊
- 模板消息行業選擇
- 分銷中心分銷通知設置店長稿
- 微信支付提示:wxpay:faild
- 微信支付提示簽名錯誤解決方法
- 微信支付提示:“URL未注冊”
- 有調商城【會員等級】與【分銷商等級】的區別
- 微信提示“請在微信客戶端內打開”“該鏈接無法訪問"
- 模板消息(高級模式)使用說明
- 新增快速導入批量發貨功能
- 關于OAuth2.0授權方式的調整
- 有調商城系統設置
- 商城各入口的設置
- 商品價格為0的修復
- 商城會員等級升級依據和商品分類層級設置
- 系統消息提醒和模板消息庫的設置
- 選擇開啟商城支付方式
- 商城交易設置
- 商城基礎、關注分享及關閉設置
- 商城管理
- 商城商品組的使用
- 如何添加虛擬卡?
- 如何設置商品自定義表單
- 如何設置商品線下核銷
- 如何設置商品分銷
- 如何設置下單通知
- 如何設置購買商品強制關注
- 如何設置商品購買權限
- 如何設置商品詳情
- 如何設置商品參數
- 如何設置商品庫存/規格
- 如何設置商品基本信息
- 商城—商品管理
- 如何設置商品分類
- o2o插件操作說明
- 商城退貨地址管理操作說明
- 商城評價管理操作說明
- 商城配送方式操作說明
- 分銷管理
- 傭金的計算方式
- 結算后的傭金怎樣打款?
- 如何審核處理申請成為分銷商?
- 如何添加分銷商等級,設置分銷商傭金比例?
- 如何審核分銷商的傭金提現申請?
- 如何設置分銷商的傭金排名?
- 如何設置成為分銷商、新增下線等通知信息?
- 如何設置分銷中心的關鍵詞?
- 如何設置分銷商層級關系及升級條件?
- 怎樣設置分銷商獲取傭金?
- 如何設置傭金結算方式?
- 如何設置分銷商升級等級依據?
- 分銷中心傭金明細如何設置查看購買者詳情及購買商品詳情?
- 如何設置分銷商自己的店鋪?
- 如何修改商城分銷中心的樣式/文字?
- 設置手機前臺推廣二維碼
- 區域代理
- 關于區域代理
- 區域代理中心的入口設置
- 成為代理商及發放分紅的通知設置
- 商城代理商分紅發放流程
- 成為代理商開啟分紅的基本設置
- 有調商城全網通
- 全網通說明
- 全網通設置詳細功能設置
- 邏輯關系說明
- 微官網管理
- 如何建立一個微官網
- 如果添加官網輪播圖
- 如何添加欄目以及欄目內容
- 如何增加導航菜單和圖標
- 如何增加微官網的自定義菜單
- 微站管理中的其它內容
- 專題頁面
- 系統概述技術文檔
- 結構概述
- 入口腳本
- 有調MVC
- URL路由&創建
- 全局變量
- 加載器
- 錯誤處理
- 前端資源
- 目錄結構
- 支付流程
- 系統模板技術文檔
- 模板標簽
- 數據調用
- 常用變量
- 系統數據庫技術文檔
- 參數綁定
- 數據操作
- 主從配置
- 連接其它數據庫
- 微信API技術文檔
- 公眾號AccessToken
- 共享收貨地址