SQL 查询删除所有行而不是特定行

SQL query deleting all rows instead of specific row

foreach ($toRemove as $remove){
            $sql = "DELETE FROM orders WHERE productId = :productId AND invoiceNo = :invoiceNo AND quantity = :quantity";
            $stmt = $pdo1->prepare($sql);
            $stmt->bindParam('productId', $remove[0], PDO::PARAM_INT);
            $stmt->bindParam('invoiceNo', $invoice->invoiceNo, PDO::PARAM_INT);
            $stmt->bindParam('quantity', $remove[1], PDO::PARAM_INT);
            $stmt->execute();
        }

$remove结构:['productId', 'quantity']

'productId' 是一个字符串,例如。 'C-1'

我预计此查询只会删除 1 行,但是,它会删除所有具有 'productId''C-x' 格式的行。当 'productId' 纯粹是一个 'int' 时,此查询工作正常,前面没有 C,但是,由于要求,我无法删除 C,因为它代表自定义产品。

您需要将 productId 标识为 PDO 参数绑定程序的字符串。 替换为:

$stmt->bindParam('productId', $remove[0], PDO::PARAM_INT);

$stmt->bindParam('productId', $remove[0], PDO::PARAM_STR);

阅读:https://www.php.net/manual/en/pdo.constants.php