第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在PHP中,當向數(shù)據(jù)庫提交字符串時,我應(yīng)該使用htmlSpecialchars()處理非法字符

在PHP中,當向數(shù)據(jù)庫提交字符串時,我應(yīng)該使用htmlSpecialchars()處理非法字符

MYYA 2019-06-20 15:45:15
在PHP中,當向數(shù)據(jù)庫提交字符串時,我應(yīng)該使用htmlSpecialchars()處理非法字符還是使用正則表達式?我正在處理一個表單,該表單允許用戶在要提交到數(shù)據(jù)庫的字符串中使用非法/特殊字符。我想轉(zhuǎn)義/否定字符串中的這些字符,并且一直在使用htmlSpecialchars()..然而,是否有更好/更快的方法?
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

如果將此數(shù)據(jù)提交給數(shù)據(jù)庫,請查看數(shù)據(jù)庫的轉(zhuǎn)義函數(shù)。

也就是說,對于MySQL來說MySQL真實轉(zhuǎn)義字符串.

這些轉(zhuǎn)義函數(shù)處理任何可能是惡意的字符,您仍將以相同的方式獲取數(shù)據(jù)。

您還可以使用準備好的語句來處理數(shù)據(jù):

$dbPreparedStatement = $db->prepare('INSERT INTO table (htmlcontent) VALUES (?)');$dbPreparedStatement->execute(array($yourHtmlData));

或者再自我解釋一下:

$dbPreparedStatement = $db->prepare('INSERT INTO table (htmlcontent) VALUES (:htmlcontent)');$dbPreparedStatement->
execute(array(':htmlcontent' => $yourHtmlData));

如果要保存不同類型的數(shù)據(jù),請使用bindParam若要定義每種類型,即可以通過以下方法定義整數(shù):$db->bindParam(':userId', $userId, PDO::PARAM_INT);..例子:

$dbPreparedStatement = $db->prepare('INSERT INTO table (postId, htmlcontent) VALUES (:postid, :htmlcontent)');
$dbPreparedStatement->bindParam(':postid', $userId, PDO::PARAM_INT);$dbPreparedStatement->bindParam(':htmlcontent', 
$yourHtmlData, PDO::PARAM_STR);$dbPreparedStatement->execute();

哪里$db是PHP數(shù)據(jù)對象(PDO)。如果你不使用它,你可以在PHP數(shù)據(jù)對象.


查看完整回答
反對 回復 2019-06-20
?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

數(shù)據(jù)庫中沒有“非法”字符。不能存儲某些字符的數(shù)據(jù)庫是一派胡言。有一些服務(wù)字符,如引號,用于分隔字符串。這些角色應(yīng)該只是轉(zhuǎn)義,而不是被刪除。

要向數(shù)據(jù)庫發(fā)送查詢,您有兩個選項:

  1. 構(gòu)建一個通常的查詢方式,使其看起來與SQL控制臺中運行的SQL查詢完全一樣。
    要做到這一點,一個人應(yīng)該明白一整套規(guī)則,而不僅僅是“使用MySQL_REAL_EXECH_String”。
    規(guī)則,如:

    • 字符串應(yīng)該用引號和轉(zhuǎn)義來括起來。這是轉(zhuǎn)義的唯一含義:它只是逃避分隔符!(以及其他一些字符-字符串終止字符和轉(zhuǎn)義字符本身)。沒有周圍的引號,MySQL_REAL_EXECH_String就沒用了。
    • 數(shù)字應(yīng)該顯式地轉(zhuǎn)換為它的類型。雖然數(shù)據(jù)數(shù)字可以像字符串一樣受到威脅,但也有一些數(shù)字,比如限制子句參數(shù),它們不能轉(zhuǎn)義,只能進行強制轉(zhuǎn)換。
  2. 發(fā)送查詢和數(shù)據(jù)分別.
    這是最可取的方式,因為它可以縮短為只是“使用綁定”。所有字符串、數(shù)字和限制參數(shù)都可以綁定-完全不用擔心。
    使用此方法,您的查詢將占位符按原樣發(fā)送到數(shù)據(jù)庫,綁定數(shù)據(jù)以單獨的數(shù)據(jù)包發(fā)送,因此不會發(fā)生干擾。就像電碼數(shù)據(jù)分離。將程序(查詢本身)與數(shù)據(jù)分開發(fā)送。

但!

上面提到的所有內(nèi)容都只涉及查詢的數(shù)據(jù)部分。
但有時我們必須使查詢更加動態(tài),添加運算符或標識符。
在這種情況下,每個動態(tài)參數(shù)都應(yīng)該在腳本中進行硬編碼,并從該集合中選擇。
例如,要執(zhí)行動態(tài)排序:

$orders  = array("name","price","qty"); //field names$key     = array_search($_GET['sort'],$orders)); 
// see if we have such a name$orderby = $orders[$key];
 //if not, first one will be set automatically. smart enuf :)$query   = "SELECT * FROM `table` ORDER BY $orderby"; 
 //value is safe

或動態(tài)搜索:

$w     = array();$where = '';if (!empty($_GET['rooms']))     
$w[]="rooms='".mesc($_GET['rooms'])."'";if (!empty($_GET['space']))     
$w[]="space='".mesc($_GET['space'])."'";if (!empty($_GET['max_price'])) 
$w[]="price < '".mesc($_GET['max_price'])."'";if (count($w)) $where="WHERE ".implode(' AND ',$w);$query="select * from table $where";

在本例中,我們只向查詢中添加由用戶輸入的數(shù)據(jù),而不是字段名,這些數(shù)據(jù)都是在腳本中硬編碼的。對于綁定,算法將非常相似。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 951 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號