A. thinkphp5 怎麼用odbc連接sql2000 ,報錯,求解
因需求改變要使用到PHP連接sqlserver2000資料庫操作(之前是用Java連接寫的介面)。
1.准備開發框架:thinkphp5
2.系統開發環境ubuntu系統(這里需要配置odbc_dblib擴展)
3.tp5配置編寫
'type' => 'dblib',
// 伺服器地址
'hostname' => '1422222.168222.10222.103222321',
// 資料庫名
'database' => 'voucher111333',
// 用戶名
'username' => 'voucher',
// 密碼
'password' => 'qwyf123456',
// 埠
'hostport' => '1433',
4.連接資料庫成功,能取回數據(由於mssql編碼為gb2312,需轉換為utf-8,才不會出現中文亂碼問題)
5.php代碼如下:
$dbDB = new PDO ("dblib:host=ip;dbname=name", "232", "123456");
$sql = "SELECT count(1) FROM tablename";
foreach ($dbDB->query($sql) as $row) {
var_mp($row);
}
B. thinkphp高手幫我下!sql查詢用concat出錯
改用數組方式即可
$cate=$cat->field(array("id","oderby","concat(oderby,'-',id) as aaa"))->order('aaa')->select();
C. thinkphp這個怎麼解釋
如果需要對多表進行操作,可以這樣使用:
$Model->field('user.name,role.title')->table('think_useruser,think_rolerole')->limit(10)->select();
其中think_user和think_role是表
=>user和=>role分別是think_userthink_role的別名相當於sql語句中的as
望採納Thx
D. 這個sql語句怎麼改成thinkphp的查詢
寫一個model類就行
//文件名字:xxxxViewModel.php----這個是3.1版本
<?php
{
public$viewFields=array(
'表1'=>array('你要搜索的欄位在前台顯示,多個用逗號隔開','_type'=>'LEFT'),
'表2'=>array('你要搜索的欄位在前台顯示','_on'=>'表1的某一個欄位=表2的某一個欄位值')
);
}
//文件名字:xxxxViewModel.php----這個是3.2版本
<?php
namespaceAdminModel;
useThinkModelViewModel;
{
public$viewFields=array(
'表1'=>array('你要搜索的欄位在前台顯示,多個用逗號隔開','_type'=>'LEFT'),
'表2'=>array('你要搜索的欄位在前台顯示','_on'=>'表1的某一個欄位=表2的某一個欄位值')
);
}
?>
然後D函數select 就行
E. Thinkphp怎麼批量更新數據
thinkphp批量更新數據可以參考如下三種方法:
方法一:
//批量修改 data二維數組 field關鍵欄位 參考ci 批量修改函數 傳參方式
function batch_update($table_name='',$data=array(),$field=''){
if(!$table_name||!$data||!$field){
return false;
}else{
$sql='UPDATE '.$table_name;
}
$con=array();
$con_sql=array();
$fields=array();
foreach ($data as $key => $value) {
$x=0;
foreach ($value as $k => $v) {
if($k!=$field&&!$con[$x]&&$x==0){
$con[$x]=" set {$k} = (CASE {$field} ";
}elseif($k!=$field&&!$con[$x]&&$x>0){
$con[$x]=" {$k} = (CASE {$field} ";
}
if($k!=$field){
$temp=$value[$field];
$con_sql[$x].= " WHEN '{$temp}' THEN '{$v}' ";
$x++;
}
}
$temp=$value[$field];
if(!in_array($temp,$fields)){
$fields[]=$temp;
}
}
$num=count($con)-1;
foreach ($con as $key => $value) {
foreach ($con_sql as $k => $v) {
if($k==$key&&$key<$num){
$sql.=$value.$v.' end),';
}elseif($k==$key&&$key==$num){
$sql.=$value.$v.' end)';
}
}
}
$str=implode(',',$fields);
$sql.=" where {$field} in({$str})";
$res=M($table_name)->execute($sql);
return $res;
}
//測試
function test(){
$update_array=array();
for ($i=2; $i <7 ; $i++) {
$data=array();
$data['id']=$i;
$data['memeber_type']=2;
$data['memeber_type_state']=1;
$update_array[]=$data;
}
$res=$this->batch_update('yl_member',$update_array,id);
var_mp($res);
}
F. thinkphp 3.1.2 中M方法使用sql語句報錯問題;
你先輸出sql語句看看。echo getlastsql();exit;//輸出上一步sql語句。然後把語句拿到資料庫中執行看看,如果是對的,那你要檢查一下你的資料庫配置文件中資料庫連接是否正常。
G. thinkphp sql查詢合並
$zongji['新訂單']=$SQL->where("狀態in(0,1,2,4,8)and部門名稱='".$bmmc."'")->field("count(*)ascount,狀態")->group("狀態")->select();
大概就這個意思了 單獨的狀態可以用in +group 出來。剩下的就是用php數組轉換成你想要的數據。
未付的條件過多且無規律 還是直接寫比較好
H. thinkPHP 怎麼合並sql語句
$zongji['新訂單']=$SQL->where("狀態 in (0,1,2,4,8) and 部門名稱='".$bmmc."'")->field("count(*) as count,狀態")->group("狀態")->select();
大概就這個意思了 單獨的狀態可以用in +group 出來。剩下的就是用php數組轉換成你想要的數據。
未付的條件過多且無規律 還是直接寫比較好
I. thinkphp的資料庫查詢
SELECT*FROM((SELECT*FROMuserasis_mWHEREis_m.isMember='1')UNIONALL(SELECT*FROMuserasnot_isWHEREnot_is.isMember='0'ORDERBYRAND()LIMIT10))astORDERBYt.idDESCLIMIT10,20"
這是雛形,你可以進行優化。
拆分詳解:
(SELECT * FROM user as is_m WHERE is_m.isMember = '1') 這個括弧中,是查詢會員,這個不用多說,你應該明白,至於為什麼要加別名,同表多次查詢自然要加別名以區分;
(SELECT * FROM user as not_is WHERE not_is.isMember = '0' ORDER BY RAND() LIMIT 10 )這個括弧中,是查詢非會員,其中ORDER BY RAND() LIMIT 10是關鍵,它的意思就是從中隨機取十個結果;
SELECT * FROM (會員 UNION ALL非會員) as t ORDER BY t.id DESC LIMIT 10,20。這里即用到了聯合查詢UNION ALL,也用到了子查詢,把聯合查詢的結果作一個結果集,然後從中進行查詢,查詢這個結果集的時候,使用ORDER BY和LIMIT進行分頁處理。
以上,就是該語句的詳解了,當然,其中也需要你做一些處理。
比如要先進行判斷會員數滿沒滿三十個,滿了則無需如此,直接使用會員,沒滿則計算出還差多少個,在查詢非會員那裡LIMIT 數字才好使用;
至於分頁,這個又是另一個問題了,你應該知道怎麼分頁的。