本文目錄一覽:
- 1、php執行mysql的SQL語句,能否忽略錯誤?
- 2、think php 裡面 模型執行sql語句報錯 怎麼回事
- 3、php如何防止sql注入
- 4、php如何避免在循環中使用sql語句
- 5、thinkphp3.2.3 執行原生sql語句(SET SQL_QUOTE_SHOW_CREATE = 1)時報錯,是怎麼回事?
php執行mysql的SQL語句,能否忽略錯誤?
mysql有提供ignore關鍵字~
使用
insert ignore into ….
這樣,當違背了唯一約束的時候~就會直接跳過,不會報錯。
think php 裡面 模型執行sql語句報錯 怎麼回事
推測兩種原因吧
第一種是你的數據庫配置不正確,重新配置一下,找到在Conf 文件夾裡面的config.php可以配置
第二種是你的數據庫表名沒有加上bbs這個前綴,你要麼把你所有的表名全部加上這個前綴,要麼就在配置里取消前綴的使用,推薦還是使用前綴,可以有效的防止sql注入
php如何防止sql注入
PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。
使用PDO防注入。
這是最簡單直接的一種方式,當然低版本的PHP一般不支持PDO方式去操作,那麼就只能採用其它方式。
採用escape函數過濾非法字符。
escape可以將非法字符比如 斜杠等非法字符轉義,防止sql注入,這種方式簡單粗暴,但是不太建議這麼用。
自己手寫過濾函數,手寫一個php sql非法參數過濾函數來說還是比較簡單的,但是你的函數需要非常的健壯,不讓仍然有可能被非法黑客攻擊;你的Coding水平直接決定了你的函數的健壯性。
各種框架裡面其實都有對於非法字符過濾的支持,最簡單的比如ThinkPHP,你可以直接防止注入。
寫一個PHP擴展對於進入參數進行有選擇的過濾。 開發一個PHP擴展是對於一個PHP高級程序員必備的技能,將你需要的功能打包在PHP擴展裡面,就像黑詞過濾一樣進行檢查,是非常方便的。一般都是用在自己寫框架路由器轉發的時候,如果你用擴展實現框架的路由器轉發的話,可以順便將參數過濾加入到PHP擴展裡面,通過C去實現。
對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問權限,一般來說都是直接給你種一個挖礦機器人來。
php如何避免在循環中使用sql語句
1、循環內拼接sql語句,循環外執行
例如:
//假設這裡的$users是一個很大的數組,我們要循環取出其中的值foreach($users as $user){//這部分的sql是我從項目中隨便摘抄出來的。主要就是實現拼接sql語句$sql .= ” (‘{$order_sn}’, ‘{$this-user_id}’, ‘{$deliver_fee}’, 0, “
. ” ”, ”, ”, “
. ” ‘{$add_time}’,'{$order_status}’, ‘{$order_amount}’, ‘{$remark}’, “
. ” ‘{$pickup_code}’, ‘{$self_pickup}’, ‘{$collect_order_sn}’, ‘{$key}’, {$reservation_time}),”;
}
//循環中拼接好sql之後,我們在循環外執行$sql = substr($sql, 0, -1);
DB::statement($sql);1234567891011
2、where條件換為where in()
比如我們的where()條件中要使用大規模的數組,那麼在語句應該是:
foreach($arr as $v){
DB::table(”)-where(‘id’,$v-id);
}123
此時我們可以轉變一下:
//先取出條件數組$arr,在直接執行whereIn即可DB::table(”)-whereIn(‘id’,$arr);12
注意:如果數據量很大,比如幾十萬條數據,那麼whereIn也會成為代碼的瓶頸,這個函數適用於數據量不是很大的情況。
thinkphp3.2.3 執行原生sql語句(SET SQL_QUOTE_SHOW_CREATE = 1)時報錯,是怎麼回事?
query 執行SQL查詢操作
$Model = M()
$Model-query(“select * from think_user where status=1”);
如果數據非法或者查詢錯誤則返回false
否則返回查詢結果數據集(同select方法)
你用插入語句 返回的不是數組 所以就報錯了吧
execute用於更新和寫入數據的sql操作
$Model = M()
$Model-execute(“update think_user set name=’thinkPHP’ where status=1”);
如果數據非法或者查詢錯誤則返回false
否則返回影響的記錄數
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/252816.html