Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除数据库中的值-PHP_Php_Mysql - Fatal编程技术网

删除数据库中的值-PHP

删除数据库中的值-PHP,php,mysql,Php,Mysql,我应该删除值​​从数据库中但现在结束,我得到的唯一结果是将某个值设为null,然后该值变为无效,但是如果我想重复该过程,我就不能再这样做了。我的目标是自由删除给定活动中我想要的所有产品,放置删除代码: <a href="#elimina<?php echo $row['impianto_id_campagna']; ?>" data-toggle="modal" class="btn-floating btn-sm btn-pin "><span class="gl

我应该删除值​​从数据库中但现在结束,我得到的唯一结果是将某个值设为null,然后该值变为无效,但是如果我想重复该过程,我就不能再这样做了。我的目标是自由删除给定活动中我想要的所有产品,放置删除代码:

<a href="#elimina<?php echo $row['impianto_id_campagna']; ?>" data-toggle="modal" class="btn-floating btn-sm btn-pin "><span class="glyphicon glyphicon-trash"></span> <i class='fa fa-remove' aria-hidden='true'></i></a

删除页面:

<?php

include '../../connessione.php';

$impianto_id_campagna=$_GET['impianto_id_campagna'];

mysqli_query($connessione,"UPDATE campagne_cliente SET impianto_id_campagna = NULL WHERE impianto_id_campagna = '$impianto_id_campagna'");

header('location: campagne.php');
?>

我的数据库结构:


在图片中,您将看到一个值设置为0,但如果我以后想将另一个值设置为0,我无法执行此操作,最大值是删除整行,从id_impianto_campagna开始,如果您要删除主键上的记录,则替换:

"UPDATE campagne_cliente SET impianto_id_campagna = NULL WHERE 
impianto_id_campagna = '$impianto_id_campagna'"
与:


然后再次检查。

您使用的是
更新
查询,而您应该使用
删除
查询

如果您更换以下部件,它应该可以工作:

"UPDATE campagne_cliente SET impianto_id_campagna = NULL WHERE 
impianto_id_campagna = '$impianto_id_campagna'";
为此:

"DELETE * FROM campagne_cliente WHERE 
impianto_id_campagna = '$impianto_id_campagna'"
正如其他用户所说,您的代码可以接受SQL注入,请改用预先准备好的语句。

// ... Set your connection variables

$conn = new mysqli($host, $user, $password, $database);


// Query
$sql = "DELETE * FROM campagne_cliente WHERE impianto_id_campagna = ?";

$stmt = $conn->prepare($sql);

if(!$stmt) {
  // ... Couldn't prepare statment, handle your error
}

$id = $_GET['impianto_id_campagna'];

if(!$stmt->bind_param('i', $id)) {
  // ... Couldn't bind parameters, handle your error
}

if(!$stmt->execute()) {
  // ... Couldn't execute query, handle your error
} else {
  echo 'Record deleted.';
}

我只是想指出,将$impianto_id_campagna直接放入查询中而不进行转义,对于sql注入是开放的。应该使用适当的清理或准备好的语句。正如另一位用户所说,您的代码对SQL注入开放,我在下面更新了我的anwser,向您展示了一些可以用来防止这种情况的方法。您的答案可以通过描述您的代码的作用以及它解决问题的原因来改进。
"DELETE * FROM campagne_cliente WHERE 
impianto_id_campagna = '$impianto_id_campagna'"
// ... Set your connection variables

$conn = new mysqli($host, $user, $password, $database);


// Query
$sql = "DELETE * FROM campagne_cliente WHERE impianto_id_campagna = ?";

$stmt = $conn->prepare($sql);

if(!$stmt) {
  // ... Couldn't prepare statment, handle your error
}

$id = $_GET['impianto_id_campagna'];

if(!$stmt->bind_param('i', $id)) {
  // ... Couldn't bind parameters, handle your error
}

if(!$stmt->execute()) {
  // ... Couldn't execute query, handle your error
} else {
  echo 'Record deleted.';
}