【发布时间】:2016-04-25 17:09:18
【问题描述】:
我正在为用户提供一种方法来编辑他们的数据。我的第一种方法奏效了,但后来我想起它非常不安全,我永远不应该将数据直接插入数据库;至少那是我被告知的。我尝试通过执行 VALUES (?,?,?,?,?) 来使其更安全,这样数据就不会直接进入,这在我的注册页面中似乎工作正常(如果你愿意,我可以包括在内)。
首先,这是我的原始更新数据页面,它运行良好,但没有使用 (?,?,?,?,?) 方法:
if(isset($_POST['submit'])) {
$userid=$_SESSION['userid'];
$skype=$_POST['skype'];
$email=$_POST['email'];
$region=$_POST['region'];
$crank=$_POST['league1'];
$drank=$_POST['league2'];
if(empty($skype) || empty($email) || empty($crank) || empty($drank) || empty($region))
{
echo "Cannot leave any field blank";
}
else
{
$host= "localhost";
$dbname = "boost";
$user = "root";
$pwd = "";
$port=3306;
try
{
$mysqli= new mysqli($host, $user, $pwd, $dbname,$port);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$query = "UPDATE usertable SET SkypeID = '$skype', Email = '$email', Region = '$region', CRank = '$crank', DRank = '$drank' WHERE UserID = '$userid'";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sssss",$skype,$email,$region,$crank,$drank);
$stmt->execute();
$iLastInsertId=$mysqli->insert_id;
header('Location: http://localhost/Boost/account.php');
$stmt->close();
$mysqli->close();
} catch (mysqli_sql_exception $e) {
throw $e;
}
}
}
这是我试图使其更安全的方法,但这似乎不起作用。具体来说,$query = "UPDATE usertable SET usertable(SkypeID,Email,Region,CRank,DRank) VALUES (?,?,?,?,?) WHERE UserID = '$userid'"; 似乎是问题所在,尽管语法对我来说看起来不错
if(isset($_POST['submit'])) {
$userid=$_SESSION['userid'];
$skype=$_POST['skype'];
$email=$_POST['email'];
$region=$_POST['region'];
$crank=$_POST['league1'];
$drank=$_POST['league2'];
if(empty($skype) || empty($email) || empty($crank) || empty($drank) || empty($region))
{
echo "Cannot leave any field blank";
}
else
{
$host= "localhost";
$dbname = "boost";
$user = "root";
$pwd = "";
$port=3306;
try
{
$mysqli= new mysqli($host, $user, $pwd, $dbname,$port);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$query = "UPDATE usertable SET usertable(SkypeID,Email,Region,CRank,DRank) VALUES (?,?,?,?,?) WHERE UserID = '$userid'";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sssss",$skype,$email,$region,$crank,$drank);
$stmt->execute();
$iLastInsertId=$mysqli->insert_id;
header('Location: http://localhost/Boost/account.php');
$stmt->close();
$mysqli->close();
} catch (mysqli_sql_exception $e) {
throw $e;
}
}
}
所以我不确定问题是什么。根据我使用 PHP 的经验,语法应该没问题,但我一定遗漏了一些东西。
【问题讨论】:
-
您使用的是什么数据库? SQL 更新值语法是不寻常的。你确定它有效吗?为什么要改变以前更传统的语法?
-
试试
UPDATE usertable SET SkypeID = ?,Email = ?,Region = ?,CRank = ?,DRank = ? WHERE UserID = '$userid' -
您是否收到任何错误消息?通常这些有助于理解错误。
-
@Matt 谢谢,成功了!