當前位置:首頁 » 編程語言 » thinkphp5執行sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

thinkphp5執行sql

發布時間: 2023-02-04 20:23:17

A. thinkphp怎麼做才是安全的sql防注入

  1. 注入的產生一般都是對用戶輸入的參數未做任何處理直接對條件和語句進行拼裝.


    代碼舉例:

    //不安全的寫法舉例1

$_GET['id']=8;//希望得到的是正整數

$data=M('Member')->where('id='.$_GET['id'])->find();

$_GET['id']='8 or status=1';//隱患:構造畸形查詢條件進行注入;

//安全的替換寫法

$data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用數組方式將自動使用框架自帶的欄位類型檢測防止注入

$data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//類型約束

$data=M('Member')->where('id='.intval($_GET['id']))->find();//類型轉換

$data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人習慣寫法

$data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驅動可以使用參數綁定

$data=M('Member')->where("id=%d",array($_GET['id']))->find();//預處理機制

//不安全的寫法舉例2

$_GET['id']=8;//希望得到的是正整數

$data=M()->query('SELECT * FROM `member` WHERE id='.$_GET['id']);//執行的SQL語句

$_GET['id']='8 UNION SELECT * FROM `member`';;//隱患:構造畸形語句進行注入;

2.防止注入的總的原則是<<根據具體業務邏輯,對來源於用戶的值的范圍,類型和正負等進行限制和判斷>>,同時<<盡量使用THINKPHP自帶的SQL函數和寫法>>.

3.在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.

4.為COOKIE添加httponly配置


5.最新版本的thinkphp已經支持此參數。

9.富文本過濾

富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.

B. thinkphp5原生查詢時,查詢結果怎麼分頁,具體代碼應該怎麼寫

造成這個錯誤的原因是 Db::query($sql)返回的是數組,解決方法:
$list = Db::table('procts')->field('id,name,price')->paginate(5);
視圖:
遍歷$list元素
分頁{$list->render()}

C. 請教大神thinkphp5 怎麼列印sql語句

你好,一共有兩種方法可以列印sql語句,具體實現方法可參照這篇文章:

ThinkPHP5列印sql語句

[SQL]SHOWCOLUMNSFROM`think_action`[RunTime:0.001339s]
[EXPLAIN:array('id'=>'1','select_type'=>'SIMPLE','table'=>'think_action','partitions'=>NULL,'type'=>'ALL','possible_keys'=>NULL,'key'=>NULL,'key_len'=>NULL,'ref'=>NULL,'rows'=>'82','filtered'=>'100.00','extra'=>NULL,)]
[SQL]SELECT*FROM`think_action`LIMIT1[RunTime:0.000539s]

D. thinkphp5一個表裡的欄位值就是另一個表裡的欄位值,怎麼獲取另一個表的欄位值呢

ThinkPHP內置的ORM和ActiveRecord模式實現了方便的數據存取操作,而且新版增加的連貫操作功能更是讓這個數據操作更加清晰,但是ThinkPHP仍然保留了原生的SQL查詢和執行操作支持,為了滿足復雜查詢的需要和一些特殊的數據操作,SQL查詢的返回值因為是直接返回的Db類的查詢結果,沒有做任何的處理。而且可以支持查詢緩存。主要包括下面兩個方法:

1、query方法

query方法是用於sql查詢操作,和select一樣返回數據集,例如:

$Model = new Model() // 實例化一個model對象 沒有對應任何數據表

$Model->query("select * from think_user where status=1");

2、execute方法

用於更新和寫入數據的sql操作,返回影響的記錄數,例如:

$Model = new Model() // 實例化一個model對象 沒有對應任何數據表

$Model->execute("update think_user set name='thinkPHP' where status=1");

關於原生SQL操作的一點補充

通常使用原生SQL需要手動加上當前要查詢的表名,如果你的表名以後會變化的話,那麼就需要修改每個原生SQL查詢的sql語句了,針對這個情況,TP還提供了一個小的技巧來幫助解決這個問題。

E. 請教大神thinkphp5 怎麼列印sql語句

一樣的只要你php配置和語法沒錯 , echo db('table'->)getlastsql();

F. thinkphp5 怎麼同時連接mysql和sqlserver 2種資料庫

到微軟官網下載文件,網址:網路搜索選擇「SQLSRV20.EXE」,點擊"next"(下一步),進行下載右鍵解壓到當前目錄,把這兩個文件拷貝到PHP目錄下的ext目錄下下圖是拷貝後的結果,請參考,不要拷錯了。打開php-ini在文件中設置,加上下面兩行代碼,如下圖下面這里設置為On,保存,重啟服務,如下圖修改thinkphp配置文件,如下圖thinkphp控制器文件,隨便查個sqlserver表中的數據,看是否能成功列印,如果成功列印,那麼證明資料庫連接成功。如果不能正確列印,那麼看報錯提示,在按照提示解決問題。

G. 關於thinkPHP中 foreach 裡面執行sql語句

原生sql查詢有
query()

execute()
兩個方法:
query():用於
sql
查詢操作,並返回符合查詢條件的數據集
execute():更新和寫入數據的
sql
操作,返回影響的記錄數
public function read(){
// 實例化一個空模型,沒有對應任何數據表
$ = m();
//或者使用 $ = new model();
$list = $->query("select * from user where uid<5");
if($list){
$this->assign('list', $list );
$this->display();
} else {
$this->error($->geterror());
}
}public function read(){
header("content-type:text/html; charset=utf-8");
// 實例化一個空模型,沒有對應任何數據表
$ = m();
//或者使用 $ = new model();
$num = $->execute("update user set email = '[email protected]' where uid=3");
if($num){
echo '更新 ',$num,' 條記錄。';
}else{
echo '無記錄更新';
}
}

H. thinkphp5 sqlserver 怎麼使用 order

資料庫配置格式為
'db_type' => 'pdo',
'db_user' => 'XX',
'db_pwd' => 'XXXXXXXX',
'DB_DSN' => 'sqlsrv:Server=XXXXXX;Database=XXXX',
用不上thinkphp的DB_type為mssql 和sqlser這兩個類型。
pdo連接在php5.3需要擴展dll,擴展文件為:php_pdo_sqlsrv_53_ts_vc9.dll(64位操作系統).在微軟下載網站上查找SQLSRV20.EXE下載。EXE是可解壓文件。
安裝SqlServer的軟體,由於很少接觸mssql,這軟體幹嘛的我也不知道,應該是用來連接資料庫的,名稱是sqlncli,在微軟下載網站上查找sqlncli.msi下載安裝。

I. 怎樣在thinkphp裡面執行原生的sql語句

原生SQL查詢有 query() 和 execute() 兩個方法:

query():用於 SQL 查詢操作,並返回符合查詢條件的數據集

execute():更新和寫入數據的 SQL 操作,返回影響的記錄數

publicfunctionread(){
//實例化一個空模型,沒有對應任何數據表
$Dao=M();
//或者使用$Dao=newModel();

$list=$Dao->query("select*fromuserwhereuid<5");
if($list){
$this->assign('list',$list);
$this->display();
}else{
$this->error($Dao->getError());
}
}
publicfunctionread(){
header("Content-Type:text/html;charset=utf-8");
//實例化一個空模型,沒有對應任何數據表
$Dao=M();
//或者使用$Dao=newModel();

$num=$Dao->execute("updateusersetemail='[email protected]'whereuid=3");
if($num){
echo'更新',$num,'條記錄。';
}else{
echo'無記錄更新';
}
}

J. 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);
}