gpt4 book ai didi

mysql - Perl - 在没有主键的情况下更新 mysql 表

转载 作者:行者123 更新时间:2023-11-29 02:20:24 26 4
gpt4 key购买 nike

我有一个没有主键的表。我需要执行以下操作:

UPDATE t1
SET tstamp = now()
WHERE `col1` = 1
AND `col2` = 'this';

在 Workbench 中它会抛出 Error 1175 直到我在更新前执行这一行:

SET SQL_SAFE_UPDATES = 0;

有了这条线,它工作得很好。

但是当我尝试在 perl 中执行此操作时,它不起作用。我都试过了

$dbh->do("SET SQL_SAFE_UPDATES = 0");

my $dbh = DBI->connect("DBI:mysql:$db:$host:$port",$user,$password, { RaiseError => 1, AutoCommit => 0, sql_safe_updates => 0 })

但是还是不行。

我怎样才能在 perl 中完成这项工作?

更新。我用 @@sql_safe_updates 检查并提交更新了代码。

代码:

$sth = $dbh->prepare("SELECT @\@sql_safe_updates"); $sth->execute; while(my @row = $sth->fetchrow_array) { print "sql_safe_updates before: ". $row[0] . "\n"; }

$dbh->do("SET SQL_SAFE_UPDATES = 0") or die $dbh->errstr;

$sth = $dbh->prepare("SELECT @\@sql_safe_updates"); $sth->execute; while(my @row = $sth->fetchrow_array) { print "sql_safe_updates after: " . $row[0] . "\n"; }

$query = "UPDATE t1 SET tstamp = now() WHERE `col1` = 1 AND `col2` = 'this'";
$sth = $dbh->prepare($query);
$rv = $sth->execute or die $sth->err();
$dbh->commit;
if ("$rv" ne "1") {
$query =~ s/\n/ /g; $query =~ s/ / /g;
print "Failed to run query: $query\n";
exit;
}

输出:

sql_safe_updates before: 0
sql_safe_updates after: 0
Failed to run query: UPDATE t1 SET tstamp = now() WHERE `col1` = 1 AND `col2` = 'this'

UPD2。我检查了表格——我提交后一切正常。令人困惑的是,$rv 在 select 成功时为 1,在 update 成功时为 2

最佳答案

这是一个返回代码检查错误,并且缺少提交。

关于返回码检查,对于非SELECT语句,execute returns the number of rows affected, if known. .受影响的零行(与错误相反)表示为特殊的“零但真实”值“0E0”。在 OP 的例子中,语句返回 2。

关于mysql - Perl - 在没有主键的情况下更新 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32823378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com