预准备语句一次执行多个查询

时间:2013-11-12 03:56:47

标签: php mysql mysqli

我已经尝试了好几个小时但仍然没有运气。我只是使用复选框从两个表中删除行。假设我已经检查了两个结果并点击了删除,那么应该从两个表中删除这两行。

在下面的代码中,第一个查询删除了两行,但第二个查询只删除了一行。如果我只是单独运行每个查询,那么他们都删除两行?我尝试了很多次但是我无法实现我想要的目标。

有人可以告诉我为什么每个查询都无法删除两行吗?或者有更好的方法吗?某种替代方案?

  $stmt1  = $mydb->prepare("DELETE from laptop where username = ? and id = ?");
echo $mydb->error;
foreach  ($_POST['id'] as $id)
{
$stmt1->bind_param('ss', $username->username, $pdata);
$stmt1->execute();
}

$stmt2  = $mydb->prepare("DELETE from search where username = ? and id = ?");
echo $mydb->error;
foreach  ($_POST['id'] as $id)
{
$stmt2->bind_param('ss', $username->username, $id);
$stmt2->execute();
}

2 个答案:

答案 0 :(得分:0)

为什么不组合成一个查询?

$stmt1  = $mydb->prepare("DELETE from laptop, search where username = ? and id = ?");

答案 1 :(得分:0)

在上面的示例中,第一个查询循环遍历$ _POST ['id'],但它总是使用相同的值$ pdata作为id =?的参数。

如果该查询正在删除多行,那么您在该表中的用户名/ ID重复。您应该删除循环,因为您正在执行多次运行相同删除查询的额外工作。

你提到第一个查询正在运行而第二个查询不是。

如果是这种情况,您是否可以在循环中回显$ id的值并验证它是否循环两次且值是您期望的值?