Php 为什么这个mysql更新脚本不能工作?
几个小时以来,我一直在努力更新我的数据库Php 为什么这个mysql更新脚本不能工作?,php,mysql,Php,Mysql,几个小时以来,我一直在努力更新我的数据库 <? //edit_item_data.php $con=mysqli_connect("localhost","root","","Inventory"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql= "UPDATE Item
<?
//edit_item_data.php
$con=mysqli_connect("localhost","root","","Inventory");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql= "UPDATE Item
SET Catagory = '$_POST[Catagory]',
Cost = '$_POST[Cost]',
Condition = '$_POST[Condition]',
PurchaseLot_PurchaseLotID = '$_POST[PurchaseLot]',
Location = '$_POST[Location]',
Desc = '$_POST[Desc]',
Notes = '$_POST[Notes]'
WHERE
ItemID = '$_POST[id]'";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
<script type='text/javascript'>
settimeout('self.close()',5000);
</script>
我正在运行mysql 5.6和PHP5.5。我敢肯定这有点愚蠢,但我一辈子都看不清它是什么。好吧,你很容易做你正在做的事情,但问题是你没有用引号括住你的变量,例如:
SET Catagory = '$_POST[Catagory]',
-- etc
在将它们放入SQL之前使用,如下所示:
SET Catagory = '" . mysqli_real_escape_string($_POST['Catagory'], $con) . "',
$sql = "UPDATE `Item` SET
`Catagory` = '".mysqli_real_escape_string($_POST['Catagory'],$con)."',
`Cost` = '".mysqli_real_escape_string($_POST['Cost'],$con)."',
........
WHERE `ItemID` = ".intval($_POST['id']);
你想要这样的东西:
SET Catagory = '" . mysqli_real_escape_string($_POST['Catagory'], $con) . "',
$sql = "UPDATE `Item` SET
`Catagory` = '".mysqli_real_escape_string($_POST['Catagory'],$con)."',
`Cost` = '".mysqli_real_escape_string($_POST['Cost'],$con)."',
........
WHERE `ItemID` = ".intval($_POST['id']);
旁注,拼写为“类别”
编辑:如果你像我一样,不能被要求键入这么长的函数名
$e = function($str) use ($con) {
return mysqli_real_escape_string($str,$con);
};
然后:
真正的问题是缺乏严肃的口音
SET `Catagory` = '$_POST[Catagory]',
SQL语句无效,因为有多个字符串变量未加引号直接放入其中,这是无效的。你所拥有的是高度的。现在是退一步阅读的好时机,以缓解您的报价问题和大的安全问题。mysql_*已被弃用,-1建议-编辑好的快速编辑,我将收回,所以我错过了“I”。Sue me.还有连接资源另外,预先准备好的语句比
*\u real\u escape\u string
@NiettheDarkAbsol更健壮。我很高兴看到这一点。我会留给你的。我已经尝试过了,但它仍然会给我相同的错误信息。一旦我更好地理解准备好的语句,这将变得更安全。但这也仅存在于vpn环境中。它永远看不到开放的网络。很公平-你在所有变量周围都加了引号?我已经更新了上面的代码以反映我所做的更改。它仍然给我同样的错误。亲爱的上帝。(如果冒犯了请原谅)它是回来了`````