2012-10-29 2 views
0

내 문제를 선택할 수 없습니다 : 나는 MySQL과 "진"의 필드를 선택할 수 없습니다이진 필드 엉 PHP를

structure db

이것은 쿼리 (이하 "동일하지를"주의) :

SELECT * 
FROM `pt_peers` 
WHERE `info_hash` != '7f398565868f7f08f71d236b88e4e433d2311de8' 

CREATE TABLE IF NOT EXISTS `pt_peers` (
    `info_hash` binary(20) NOT NULL, 
    `peer_id` binary(20) NOT NULL, 
    `compact` binary(6) NOT NULL, 
    `ip` char(15) NOT NULL, 
    `port` smallint(5) unsigned NOT NULL, 
    `state` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `updated` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`info_hash`,`peer_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

내가 직접 해시를 선택하면 답이 null :

는 그리고 이것은 구조입니다. :/

스크립트는 다음과 같습니다 PeerTracker

+0

NOT IN으로 시도해 봤습니까? – Reshad

+0

왜 '안돼'? 해시가있는 행을 선택하고 싶지만 선택하면 결과가 표시되지 않습니다. – Julien

답변

1

당신은 테이블이 바이너리의 20 바이트를 보유으로 정의 16 진수의 ASCII 표현의 40 바이트 문자열을 전달 할 것으로 보인다.

이진 문자열 헥스 리터럴 표기법을 사용하여,이 시도 :

SELECT * 
FROM `pt_peers` 
WHERE `info_hash` = x'7f398565868f7f08f71d236b88e4e433d2311de8' 

자세한 내용은 this를 참조하십시오.

+0

당신은 절대적으로 옳습니다! 이것은 정확히 해결책입니다. DaveRandom =) – Julien

+0

작업은 매우 잘 처리되었지만 다른 해시 (db에 존재하지 않음)를 사용할 때 SQL 오류 (가능한 SQL 주입)가 발생합니다./ – Julien

+0

@ atmon3r 준비된 진술을 사용하고 있습니까? 해시가 존재하지 않을 때 오류가 발생하는 이유는 거의 없지만 16 진수 리터럴 문자열 표기법에서는 문자열에 짝수의 숫자가 필요합니다. 어떤 DB 드라이버를 사용하고 있습니까? 귀하의 쿼리 PHP 코드 중 일부를 보여줄 수 있습니까? – DaveRandom