我使用的是Perl DBI(execute_array
),但我认为这更像是一个mysql
问题。
我正在尝试DELETE
几行,并遇到命令成功完成且没有错误的问题,但我的行没有被删除(修改的行返回0E0,即"零但是真的",即" 0行被删除")。当我尝试通过PHPMyAdmin
时,删除的行没有任何问题。在我的屏幕上进行了一些调试和长时间的空白后,我意识到我在DELETE语句中使用的一个列在添加时被截断了,这解释了为什么我的脚本无法找到该行,但是PHPMyAdmin没有问题。它。但是,这并没有解释为什么我没有收到任何错误。
所以,我想这是设计的,但我想知道当你试图删除不存在的东西时,是否有办法让mysql
引发错误。我知道我可以检查受影响的行数是否与提供的元组数相同,但这并不能告诉我哪些行被成功删除,以及哪些元组引用了不存在的行(因为我正在使用{ {1}}为了这个目的)。有什么想法吗?
答案 0 :(得分:1)
我找到了针对我的特定用例的解决方法,并发布作为答案,以防它对其他人有用。
在execute_array
$sth->execute_array( { ArrayTupleStatus => \@return_vector } )
它实际上会返回"行修改的"值每行(成功时;当它失败时结果是一个数组引用),所以虽然它实际上不是一个错误,但我可以检查每个给定的元组执行是否修改了非零行(你但是,需要使用== not eq
,因为返回的是' 0E0')。
if (ref $return_vector[$i])
{ print "DELETE failed, reason: $return_vector[$i][1]"; }
elsif ($return_vector[$i] == 0)
{ print "DELETE failed, no rows matched tuples"; }
else
{ print "DELETE successful"; }