删除sql php中的行

删除sql php中的行,php,mysql,Php,Mysql,我有一个表,其中使用内部联接显示来自不同表的日期 我想添加一个可以删除一行的字段。我尝试了几个教程,但我的代码有问题。每次我尝试删除一行时,它都会显示: 拒绝用户访问(使用密码:否) 但是,我的连接配置是正常的 $query="SELECT products.id, products.product_name, products.product_description, products.product_price, collections.collection_name, collectio

我有一个表,其中使用
内部联接显示来自不同表的日期

我想添加一个可以删除一行的字段。我尝试了几个教程,但我的代码有问题。每次我尝试删除一行时,它都会显示:

拒绝用户访问(使用密码:否)

但是,我的连接配置是正常的

$query="SELECT products.id, products.product_name, products.product_description, 
products.product_price, collections.collection_name, collections.collection_season,
collections.collection_year
FROM products
INNER JOIN products_collections ON products.id = products_collections.product_id
INNER JOIN collections ON collections.id = products_collections.collection_id
ORDER BY products.product_price";

$result=mysqli_query($con,$query);
while ($row=mysqli_fetch_array($result)){
echo "<tr><td>".$row["id"]."</td><td>".$row["product_name"]."</td>
<td>".$row["product_description"].
"</td><td>".$row["collection_name"]."</td><td>".$row["collection_season"]."</td>
<td>".$row["collection_year"]."</td><td>".$row["product_price"].
" USD</td><td><a href='table.php?del=$row[id]'>Delete</a></td></tr>";

}
  if (isset($_GET['del'])){

    $id=$_GET['del'];
    $s="DELETE FROM products WHERE id='$id'";
    $res=mysql_query($s) or die ("Failed ".mysql_error());
    echo "<meta http-equiv='refresh' content='0;url=table.php'>";
}

  ?>
$query=“选择products.id、products.product\u名称、products.product\u说明,
products.product\u price,collections.collection\u name,collections.collection\u season,
收藏。收藏年
来自产品
内部连接products\u collections ON products.id=products\u collections.product\u id
collections.id=产品\u collections.collection\u id上的内部联接集合
按产品订购。产品价格”;
$result=mysqli\u查询($con,$query);
while($row=mysqli\u fetch\u数组($result)){
回显“$row[“id”]”.“$row[“product_name”]”
“$row[“产品描述”]。
“.$row[“收藏名称”]。.$row[“收藏季节”]”
“$row[“收藏年”]。”.$row[“产品价格”]。
“美元”;
}
如果(isset($\u GET['del'])){
$id=$_GET['del'];
$s=“从id='$id'的产品中删除”;
$res=mysql\u query($s)或die(“失败”。mysql\u error());
回声“;
}
?>
1。)您已连接到SQL数据库

2.)您的SQL用户是否已通过身份验证

3.)您已正确查询到唯一行并包含了
限制

DELETE FROM table WHERE id='987' LIMIT 1;
4.)您的SQL用户是否有权在SQL中使用
DELETE
命令


哇,刚刚注意到你没有逃逸数据永远不要信任客户

MySQL-API(遗留,使用下面的MySQLi)

MySQLi API

$id = mysqli_real_escape_string($database,$_GET['id']);

由于SQL注入攻击很容易成为全球最普遍的安全问题,因此,您必须检查项目中的所有SQL查询,并确保能够逃避所有问题。任何人都可以在一篇
$\u帖子中删除你的所有数据,如果他们感觉自己已经够14岁了。

首先:你混合了
mysql\u query()
mysqli\u query()
调用。如果必须使用mysql/mysqli,请坚持使用mysqli。“i”代表“改进”

第二:如果可以的话,我真的建议您开始使用PDO对象。使用它来防止SQL注入要安全得多。如果没有先准备语句并绑定变量,就不要相信任何没有硬编码放入查询中的变量

请看这里:


您是否先打开了mysql连接?如果不先运行
mysql\u connect()
,就不能简单地运行
mysql\u query()
。您是如何连接到数据库的?您的第一个查询使用mysqli,而您的delete使用mysql_*函数。你也没有准备你的陈述。您使用的是哪个函数?2015年,无论如何,您不应该使用MySQL接口,您应该使用MySQLi或PDO来准备语句/绑定变量。。。。学习坏习惯从来没有借口你的用户有什么权利?看起来您正在使用类似您的web用户的东西,并且您给了他对数据库的只读访问权限。给你的用户更多的权限。转义到底是做什么的?我不知道你的意思,我完全同意你不信任客户或任何相关数据,但以这种方式逃避是非常容易出错和乏味的。使用PDO和包装器函数来避免重复代码是一种更好的方法。准备语句和绑定变量基本上是摆脱SQL注入问题的一种万无一失的方法。@KoenVanLooveren,有用吗?-在本页的
相关
列中有一个问题:。它充满了
好东西
@KoenVanLooveren是的,你可以有一个
$\u POST['example']='My data\DELETE ALL FROM SQL
string`(不完全一样)而且,由于它无法逃脱,它可能会损坏/破坏您的数据库信息。我直接选择手动控制,因为我从不信任框架……当我使用它们时,我立即找到了进一步的理由。对于新手程序员来说,是的……我在和其他人一起工作时使用他们,我喜欢他们为新手处理安全问题,尽管他们的代码对我个人来说并不直观。
$id = mysqli_real_escape_string($database,$_GET['id']);