2013-04-25 84 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']变量,预计