2013-04-25 44 views
5

我目前使用mysqli,我想要一種方式來正確消毒每一個用戶輸入。林尋找最簡單的輕量級的方式來做到這一點,因爲我明白,我不是應該使用mysql_real_escape ....正確使用mysqli消毒多個用戶輸入

我的查詢是像這樣

$stmt = $sql->prepare("INSERT INTO Persons (msg, ip, time, main, twit, city, lat, lon, lang) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); 

按照我的理解,我應該使用函數bindParam ...如果我像這樣使用它,我是否完全確保我的用戶輸入?

$stmt->bind_param('sssssssss', $_POST[msg], ('$ip'), ('$date'), '$_POST[main]', '$_POST[twit]', ('$cit'), ('$lat'), ('$lon'), '$_POST[lang]'); 
$stmt->execute(); 
$stmt->close(); 

如果這不能保護我的用戶輸入,我該如何妥善做到這一點?

回答

4

您需要準備聲明以確保安全。像下面的東西(它可能不是100%,但給你一個想法)

$sql = new mysqli("localhost", "my_user", "my_password", "world"); 


    $stmt = $sql->prepare("INSERT INTO Persons (msg, ip, time, main, twit, city, lat, lon, lang) 
     VALUES 
     (?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
     $stmt->bind_param("sssssssss",$_POST[msg], $ip, $date, $_POST[main], $_POST[twit], $cit, $lat, $lon, $_POST[lang]); 
    $stmt->execute(); 
+0

哎抱歉什麼是「Ssssssss」? – uneducatedguy 2013-04-25 07:07:23

+1

它將輸入定義爲字符串。每個S代表每個輸入。如果是我,它會是十進制的整數或d。看看mysql->準備在php文檔上解釋它比我更好。 – Dave 2013-04-25 07:39:13

+0

我得到以下錯誤! 錯誤:在非對象 – uneducatedguy 2013-04-25 07:40:48

0

所有你必須首先要遵循的基本PHP語法

'$_POST[msg]'將插入一個文本$_POST[msg]字符串,而你對於$ _POST ['msg']變量,預計