關於向mysql資料庫中插入帶單引號字串的問題

2021-06-02 12:35:52 字數 1115 閱讀 9763

今天在向mysql資料庫中插入帶單引號字串的時候,什麼錯也沒報就是語句執行失敗,後來才知道,單引號等要轉義,可以使用函式:mysql_real_escape_string和addslashes函式;

以下做個介紹:往資料庫中插入資料之前是要先轉義的,在插入資料庫.

本文主要介紹的是用mysql_real_escape_string對使用者提交的表單資料進行轉義處理和通過addslashes以及mysql_escape_string這3個類似功能的函式用法區別。

本文很好的說明了addslashes和mysql_real_escape_string的區別,雖然國內很多php coder仍在依靠addslashes防止sql注入,我還是建議大家加強中文防止sql注入的檢查。addslashes的問題在於黑客可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為乙個有效的多位元組字元,其中的0xbf5c仍會被看作是單引號,所以addslashes無法成功攔截。

當然addslashes也不是毫無用處,它是用於單位元組字串的處理,多位元組字元還是用mysql_real_escape_string吧。

另外對於php手冊中get_magic_quotes_gpc的舉例:

<?php

if (!get_magic_quotes_gpc()) else

?>

最好對magic_quotes_gpc已經開放的情況下,還是對$_post['lastname']進行檢查一下。

再說下mysql_real_escape_string和mysql_escape_string這2個函式的區別:

mysql_real_escape_string 必須在(php 4 >= 4.3.0, php 5)的情況下才能使用。否則只能用 mysql_escape_string ,兩者的區別是:

mysql_real_escape_string 考慮到連線的當前字符集,而mysql_escape_string 不考慮。

總結一下:

addslashes() 是強行加;

mysql_real_escape_string() 會判斷字符集,但是對php版本有要求;

mysql_escape_string不考慮連線的當前字符集。

MyBatis向資料庫中批量插入資料

foreach collection 指定要遍歷的集合 表示傳入過來的引數的資料型別。該引數為必選。要做 foreach 的物件,作為入參時,list 物件預設用 list 代替作為鍵,陣列物件有 array 代替作為鍵,map 物件沒有預設的鍵。當然在作為入參時可以使用 param keyname...

向MySQL資料庫插入中文時亂碼

在做web開發時 本人用jsp做開發,資料庫用的mysql,其他開發方式可能稍有不同,但原理是一樣的 向資料庫中插入中文時出現亂碼現象。這個現象跟很多環節有關係,但最根本的是要選擇一種支援中文的編碼,且各個地方的編碼都要保持一致。這些地方主要包括資料庫的編碼,jsp頁面 請求的編碼,資料庫連線時的編...

python向oracle資料庫中插入資料

安裝完成之後 import cx oracle conn cx oracle.connect 使用者名稱 密碼 資料庫名 連線資料庫 db conn.cursor 建立游標 d1 db.execute sql語句 執行完dql查詢語句 例如select 還需要呼叫乙個fetch方法來完成操作 tup...