2013-04-25 9 views
5

Im obecnie używa mysqli, i chcę sposób, aby odpowiednio sanitize każdy pojedynczy wkład użytkownika. Im szuka najprostszych lekkiej sposób to zrobić, jak rozumiem, że Im nie powinien używać mysql_real_escape ....prawidłowo odkażać wiele wejść użytkownika z mysqli

moje zapytanie jest jak tak

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

jak rozumiem ja mam użyj funkcji bindParam ... Jeśli używam tego w ten sposób, czy jestem kompletnie zabezpieczony przez moje dane wejściowe użytkownika?

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

Jeśli to nie zabezpiecza danych wprowadzanych przez mojego użytkownika, jak to zrobić?

Odpowiedz

4

Musisz przygotować oświadczenie, aby być bezpiecznym. Coś jak poniżej (jego prawdopodobnie nie 100%, ale daje wyobrażenie)

$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

hej przepraszam za co "Ssssssss"? – uneducatedguy

+1

Jego zdefiniować dane wejściowe jako ciągi. każde S oznacza każde wejście. jeśli byłby I, byłby to całkowity lub dziesiętny. Zajrzyj do mysql-> przygotować się na dokumentach php, który wyjaśnia wszystko lepiej niż ja. – Dave

+0

Otrzymuję następujący błąd! Błąd : wywołanie funkcji składowej bind_param() na obiekcie innym niż obiekt – uneducatedguy

0

Przede wszystkim trzeba przestrzegać podstawowych składni PHP

'$_POST[msg]' zostanie wstawiony jako dosłownego $_POST[msg] ciąg, podczas oczekiwanie wartości o wartości dla zmiennej $ _POST ['msg'].

Powiązane problemy