php - 删除php Mysql中的多条记录

标签 php mysql

 <?php


$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="toybox"; // Database name 
$tbl_name="Emp"; // Table name 


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

// echo $count;

?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Lastname</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Email</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['EmpId']; ?>"></td>
 <td bgcolor="#FFFFFF"><?php echo $rows['EmpId']; ?></td>
 <td bgcolor="#FFFFFF"><?php echo $rows['FirstName']; ?></td>
 <td bgcolor="#FFFFFF"><?php echo $rows['LastName']; ?></td>
 <td bgcolor="#FFFFFF"><?php echo $rows['Email']; ?></td>
</tr>
<?php
}
?>
<tr>
 <td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td>
</tr>

<?php
// Check if delete button active, start this 
if($delete){
 for($i=0;$i<$count;$i++){
  $del_id = $checkbox[$i];
  $sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
  $result = mysql_query($sql);
 }

// if successful redirect to delete_multiple.php 
 if($result){
  echo " Record have been deleted";
 }
}
mysql_close();
?>

</table>
</form>
</td>
</tr>
</table>

最佳答案

与其对删除循环的每次迭代进行查询,不如将所有索引构建到一个字符串中,并使用如下内容:

DELETE FROM tableName 
WHERE id IN (1,2,12,53)

此外,您的提交按钮不会显示为 $delete , 而不是 $_POST["delete"] .与您的联系:

mysql_connect("$host", "$username", "$password")

你真的不应该使用像字符串这样的变量(通常)——这应该写成:

mysql_connect($host, $username, $password)

此外,您在删除逻辑中和周围还有一些问题。例如,我已经指出你的 <input type='submit' name='delete' />按钮将被称为 $_POST["delete"]一旦它在服务器上注册。同样,您的复选框的 id 值为 checkbox[]将简单地称为 $_POST["checkbox"]在服务器上。

此外,您的 $count删除逻辑中使用的变量基于先前选择所有记录以显示它们的查询。它不反射(reflect)要删除的复选框数,它反射(reflect)显示的记录数。因此,您的 for 循环不应基于它:

for ($i = 0; $i < count($_POST["checkbox"]); $i++)
{
  // delete $_POST["checkbox"][$i];
}

再一次,我建议您构建一个值字符串并运行单个查询而不是多个查询。

关于php - 删除php Mysql中的多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980597/

相关文章:

php - 数组类属性

javascript - 检测移动语法

用于分组依据/排序依据的 MySQL 索引

php - 如何检查 MySQL 查询语法?

PHP SQL 包装器

php - 从数据库 CodeIgniter 获取数据时出错

php - 将可变产品的自定义属性添加到 WooCommerce 中的购物车

MySQL进入输出文件错误

mysql - 需要帮助制定 SQL 查询 (mysql)

mysql - 按部门划分的员工 SQL 数量