PHP:删除MySQL中的特定行

时间:2014-06-27 14:08:24

标签: php mysql

我正在尝试删除mysql数据库中的一行。要删除的行由_GET标记定义。因此,如果页面URL是deletePage.php?id = 5,它将删除ID = 5的行。

到目前为止,这是我的代码:

<?php
 if (empty($_GET)) {echo "Error!";}
 else {
    include "../../includes/dke390d-ko.php";
    $pageID = $_GET['id'];;
    $conn = mysql_connect($dbhost, $dbuser, $dbpasswd);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$sql = 'DELETE FROM page
        WHERE id="$pageID"';

mysql_select_db($dbname);
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
    header("Location: index.php");
    }
 ?>

我的问题是,当我执行代码时,我收到一条错误消息:无法删除数据:'where子句'中的未知列'id'

我应该将ID放在会话中。但那会晚些。

祝你好运!

2 个答案:

答案 0 :(得分:3)

您在由单引号分隔的字符串中有一个变量。结果,变量不是插值的。交换你的报价来解决这个问题:

$sql = "DELETE FROM page
        WHERE id='$pageID'";

就像我在上面的评论中所说,你的代码已经过时且不安全。你应该把它固定在一个高优先级。

答案 1 :(得分:1)

如果还没有PHP系列的PHP已被弃用,其支持将消失。请查看PDOMySQLi

现在针对更大的问题,从不信任用户输入。您的SQL对SQL注入不安全,也不对$_GET参数进行任何检查。这是非常危险和充满灾难的灾难!

在PDO中,有一个prepare语句可以为您清理输入。

$sql = $dbh->prepare('DELETE FROM page  WHERE id=?');
$sql->execute(array($id));

execute函数采用数组,并将安全地替换代码中的任何?

如上所述,我还会检查$_GET参数;请记住,即使您的表单不允许,用户也可以提供他想要的任何内容(同样适用于$_POST)。

我会建议像:

if(!isset($_GET['id']) || !is_scalar($_GET['id']) || !is_numeric($_GET['id']))
   die('Invalid id!');

假设您希望自己的ID为is_numeric()支票的数字。检查is_scalar()有助于防止在用户访问delete.php?id[]=t之类的内容时出现的警告,这些警告非常容易。

相关问题