2011-09-15 2 views
2

:

MySQL의 5.5 에서 ActivePerl의 v5.14.1를 윈도우 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: 
,691,363 (210)

HeidiSQL 통한 SQL 실행이 예상되는 외부 키 오류 제공 : 이

윈도우 XP 32 비트에서 실행되는 동일한 스크립트 (나는 새 사용자 해요 나는 이미지를 삽입 할 수 없습니다)이 예상되는 오류를 제공합니다 :

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의 서비스를 중지 - - nnection 오류가 반환됩니다 예상대로 스크립트를 실행하고 다음 출력이 주어진다 :

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

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이 예상 운영하고 같이 같은 일부 재 포맷과 trace.txt의 조각과

. 나는 이것이 Windows 7 64 비트에 대한 버그라고 생각하고 있습니까? - 그러나 명확하게보고하거나 정확한 것을 알 수있는 정확한 장소를 찾거나 찾아내는 방법에 관해서는 명확하지 않습니다.

당신이 이것을 가지고 있다면 ... 독서에 감사드립니다!

+0

어떤 버전의'DBI'와'DBD :: mysql'입니까? – mob

답변

1

PrintError가 기본적으로 켜져 있고 DBI가 어떤 일이 발생할 경우 경고를 내게하므로 사용 경고를 추가하십시오. 또한 두 번째 $ DBI :: errstr을 $ sth-> errstr로 변경하십시오. 작동하지 않는다면 실행이 실패 리턴을 리턴하지만 DBD :: mysql이 내부적으로 set_err을 호출하지 않았다는 것이 확실합니다.

+0

의견을 보내 주셔서 감사합니다. 경고는 -w 플래그를 통해 발생했지만 "경고 사용"이 추가되었습니다 - 동일한 결과. 나는 $ sth-> errstr을 시도했다 - 예, 결과는 정의되지 않은 문자열이다. 그래서 DBD :: Windows 7-x64 용 mysql의 버그처럼 보입니다. 여기에서 어디로 가야할지 조언 해주십시오. – tadhgmaccarthy

+0

작은 자체 테스트 케이스를 작성하여 rt.cpan.org에보고하거나 dbi 사용자 (http://dbi.perl.org)에게 우편으로 보내십시오. 나는 그것이 버그라고 말하지는 않지만 DBD :: ODBC를 유지합니다. 예를 들어, perl -le 'DBI를 사용합니다. $ h = DBI-> connect ("dbi : ODBC : x", "x", "x", {RaiseError => 0, PrintError => 0}); does_not_exist "); $ s-> execute 또는 die $ s-> errstr; ' 'does_not_exist'개체 이름이 잘못되었습니다. (SQL-42S02) [현재 상태 42S02 42000] 문을 준비 할 수 없습니다. (SQL-42000) at -e line 1. – bohica

+0

다시 한번 감사드립니다. 나는 그것을 할 것입니다. 그들이 under-onya 친구라고 말하는 것처럼. – tadhgmaccarthy