使用PHP在一个SQL语句中进行多个查询

时间:2014-04-19 18:00:01

标签: php mysql sql phpmyadmin

我正在尝试在我的数据库中的多个表上执行删除语句,但由于某种原因,此代码无效,我不确定原因。 $ productId使用$ _GET变量传递。这个语句适用于phpMyAdmin,但当我进入我的网站时,它停止工作。语法错了吗?

$sql = '
    DELETE FROM products
    WHERE prod_id = ' . $productID . '
    LIMIT 1;

    DELETE FROM product_category
    WHERE prod_id = ' . $productID . '
    LIMIT 3;

    DELETE FROM product_images
    WHERE prod_id = ' . $productID .'
    LIMIT 1
';

$db->query($sql);

1 个答案:

答案 0 :(得分:0)

正如Barmar在评论中所说,PDO并不支持这一点。您可以使用mysqli_multi_query,但我不建议这样做。

我建议使用交易。我不知道你在使用什么API,但我喜欢PDO,所以我将展示一个基本的例子。

$db->beginTransaction();
$q1 = $db->query(...);
$q2 = $db->query(...);
$q3 = $db->query(...);
if ($q1 and $q2 and $q3) {
 $db->commit();
}
else {
 $db->rollBack();
}

为什么交易有用?它允许您将所有查询提交给系统,然后在将其提交给系统之前检查是否存在任何错误和逻辑计算。如果发现任何错误,可以使用rollback()来阻止上述任何查询实际修改数据库。