我正在做一个关于php的项目工作。在我的工作中,每个查询都能顺利进行。但是,当我想删除任何使用它的对象时,不会删除...
这是我的PHP代码
<?php
//delete item
if(isset($_GET['deletecat'])){
$id_to_delete = $_GET['deletecat'];
$sql = mysql_query("DELETE FROM `category` WHERE `Category_id`=$id_to_delete LIMIT 1") or die('Error: Could not delete.');
}
else{
header('location: category.php');
exit();
}
?>
之后我只收到错误消息。 GET值正常。在我的phpmyadmin上,这个SQL运行正常。但是当我想要删除任何对象时会出现弹出消息。我现在该怎么办?
答案 0 :(得分:0)
你应该首先转义GET变量以避免任何SQl注入攻击,如deceze已经说过的那样。然后,您应该了解phpmyadmin给出的消息是否需要执行删除查询。您可以使用mysql_real_escape_string($value)
来逃避,但正如php供应商所说,此功能将很快被删除,目前已被弃用。
再见..
答案 1 :(得分:0)
您可能会遇到一些问题:使用数据库连接,查询或您要发送的数据。
另外,你没有过滤“和'标记,所以你可能会遇到麻烦,而且你不能确保你的id是一个数字,所以你的sql也可能在那里失败。
但是,您可以通过对代码进行一些调整来解决这个问题....您可以在代码中插入一些诊断信息,以查看mysql报告错误的原因,并更好地了解如何修复它。
请注意,[一般建议] [1]使用mysqli扩展而不是mysql扩展,但无论如何,这里的示例代码包含您当前使用的扩展
希望这有帮助!
<?php
if ( isset($_GET['deletecat'])) {
#dbh -> database resource.
$dbh = mysql_connect()
#mysql_connect returns false if it fails. capture error and echo to output.
if (!$dbh) {
die("Could not connect to database server: ".mysql_error()."\n");
#if using mysqli use mysql_connect_error() instead
}
#never trust input. use an escape function.
$id_to_delete = mysql_real_escape_string($_GET['deletecat'],$dbh);
#force $id_to_delete to be treated as a number, or make it safer in your sql.
#i used the latter method below.
$sql = "DELETE FROM `category` WHERE `Category_id` = '$id_to_delete' LIMIT 1");
#mysql_query returns false on failure
$result = mysql_query($sql,$dbh);
#on failure catch the error and display the exact contents of 'deletecat' in a web-friendly way.
if (!$result) {
$error=mysql_error($dbh);
die ("Error: Could not delete '"
.htmlentities(print_r($_GET['deletecat'],true)).". Error: $error\n"
);
}
#if we did not trigger die() above we are ok.
header('location: category.php');
exit();
}
?>
看警告