簡體   English   中英

在Windows-7-x64上使用DBI Perl和MySql的未定義$ DBI :: errstr

[英]Undefined $DBI::errstr using DBI Perl and MySql on Windows-7-x64

使用:

MySQL 5.5 ActivePerl v5.14.1 Windows 7 64位

以下腳本在執行調用失敗時具有未定義的$ DBI :: errstr:

#!c:/perl/bin/perl.exe -w
use DBI;

my $dbh = DBI->connect('dbi:mysql:cq','root','password') or die "Connection Error: $DBI::errstr\n";

# This SQL should fail because of a foreign key constraint
my $sql = "delete from Player where ID=6462"; 

my $sth = $dbh->prepare($sql);
$sth->execute or die "SQL Error: $DBI::errstr\n";

運行腳本時的輸出為:

Use of uninitialized value $DBI::errstr in concatenation (.) or string at testmysql2.pl line 10.
SQL Error:

通過HeidiSQL運行的SQL提供了預期的外鍵錯誤:(由於我是新用戶,所以無法插入圖像)

在32位Windows XP上運行的相同腳本提供了預期的錯誤:

DBD::mysql::st execute failed: Cannot delete or update a parent row: a foreign key constraint fails (`cq`.`messageboard`, CONSTRAINT `messageboard_ibfk_1` FOREIGN KEY (`PlayerID`) REFERENCES `player` (`ID`)) at testmysql2.pl line 10.
SQL Error2: Cannot delete or update a parent row: a foreign key constraint fails (`cq`.`messageboard`, CONSTRAINT `messageboard_ibfk_1` FOREIGN KEY (`PlayerID`) REFERENCES `player` (`ID`))

注意:

無論使用哪種SQL,都會出現此問題,例如,SQL語法錯誤也將導致未定義的$ DBI :: errstr

有趣的是,返回連接錯誤-例如,停止MySQL服務-運行腳本,並按預期給出以下輸出:

DBI connect('cq','root',...) failed: Can't connect to MySQL server on 'localhost' (10061) at testmysql2.pl line 4
Connection Error: Can't connect to MySQL server on 'localhost' (10061)

設置跟蹤級別不會為我提供有用的信息:

$sth->trace(5, "trace.txt");
$sth->execute or die "SQL Error: $DBI::errstr\n";

包含trace.txt片段,並重新格式化為:

dbd_st_free_result_sets
mysql_st_internal_execute MYSQL_VERSION_ID 50147
parse_params statement delete from Player where ID=6462
dbd_st_execute returning imp_sth->row_num 18446744073709551614
execute= ( undef ) [1 items] at testmysql2.pl line 11
DESTROY for DBD::mysql::st (DBI::st=HASH(0x29dc0a8)~INNER) thr#2a97e8

正確的SQL按預期運行。 我猜這是Windows 7 64bit的錯誤嗎? -但對於如何解決或找到正確的位置進行明確報告/查找的地方,我不清楚/迷茫。

如果您到此為止……感謝您的閱讀!

默認情況下,由於PrintError處於啟用狀態,因此會添加使用警告,這會導致DBI在發生某些故障時發出警告。 另外,嘗試將第二個$ DBI :: errstr更改為$ sth-> errstr。 如果那不起作用,那么我懷疑execute正在返回失敗返回,但是DBD :: mysql內部沒有調用set_err。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM