【问题标题】:Trying to delete an entry in a database, recieve an sql error but can't work out how尝试删除数据库中的条目,收到 sql 错误但无法解决
【发布时间】:2012-02-23 22:29:29
【问题描述】:

我正在做一个非常简单的脚本来从数据库中删除一行。我以前用几乎相同的代码做过,但由于某种原因,这行不通!

Viewmessages.php 运行没有问题,但是当我尝试使用 deletemessage.php 删除行时,我收到一个 sql 错误,我只有一行 sql:

查看消息(发送信息到 deletemessage.php):

echo "<a href='deletemessage.php?contactname=".$contactname."'>Delete</a>";

以下是删除消息代码:

<?php
session_start();
if ( !isset($_SESSION['adminusername']))
{
header("Location:admin.php");
exit();
}


require "dbconn.php";

$contactname = $_GET['contactname'];

$query = "DELETE FROM message WHERE contactname =".$contactname;

$results = mysql_query($query) or die(mysql_error());

header("Location: viewmessages.php");
?>

我无法弄清楚错误是什么! viewmessages.php 文件中的 $contactname 肯定是表的主键!

有什么想法吗?>

编辑:我知道问题出在 sql 中的联系人姓名...由于某种原因它没有很好地接收它,我做了一个回显以查看它认为联系人姓名是什么并且它是正确的。然后我更改了变量并在contactname中输入了一个值的字符串,它正确删除了该行......所以问题是GET_ ['contactname']但我不确定是什么......

【问题讨论】:

  • 第一个猜测是您需要在查询中为联系人姓名加上引号 - 您得到的确切错误消息是什么?
  • 对于以后的问题,请始终包含您收到的 SQL 错误消息。我们很容易在没有看到错误的情况下发现这个错误,但很多都没有。

标签: php html sql sql-delete


【解决方案1】:

在查询中用引号将$contactname 括起来,因为它是一个字符串。但要先逃离它!它现在很容易受到 SQL 注入的攻击。我知道它可能是一个管理页面,但即使您的用户是受信任的,也要始终观察它是一个非常好的习惯。 (尤其是O'Malley先生在你试图删除他时会破坏SQL语句)

$concatname = mysql_real_escape_string($_GET['contactname']);
$query = "DELETE FROM message WHERE contactname ='".$contactname . "'";

通过超链接删除时请务必小心。看起来您在允许执行此操作之前正在检查管理员权限,但请确保这些链接无法访问广泛的 Internet,where they might get crawled.

【讨论】:

  • 谢谢...我正在自学,现在才第 6 天,所以我一直在学习保护...只是试图掌握目前的代码机制!非常感谢你的回复完美!!!
【解决方案2】:

在这里猜猜? $contactname 是一个字符串。因此,它必须在查询中用引号引起来。此外,您显然希望人们破坏您的数据库。

$query = "DELETE FROM `message` WHERE `contactname` = '".mysql_real_escape_string($contactname)."'";

【讨论】:

    【解决方案3】:

    您需要在要插入的字符串周围加上引号。

    $query = "DELETE FROM message WHERE contactname ='".$contactname."'";
    

    请注意,这非常容易受到 SQL 注入的攻击。有人可以使用此代码删除您的整个数据库表。

    【讨论】:

    • 谢谢...我正在自学,现在才第 6 天,所以我一直在学习保护...只是试图掌握目前的代码机制!非常感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2023-03-19
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多