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);
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);