2012-10-29 63 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; 

當我直接選擇哈希,答案是零。 :/

的腳本是:PeerTracker

+0

用NOT IN試過了嗎? – Reshad

+0

爲什麼'不在'?我只想選擇帶有散列的行,但是當我選擇時,沒有結果出現。 – Julien

回答

1

你好像路過的十六進制數字的ASCII表示,其中表定義爲持股20個字節的二進制的40字節的字符串。

試試這個,用六角文字符號爲二進制字符串:

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

更多信息請參見this

+0

你是絕對正確的!這正是解決方案,謝謝你的幫助DaveRandom =) – Julien

+0

操作完成得很好,但是當我使用另一個散列(不存在於db)時,我有一個sql錯誤(和一個可能的sql注入):/ – Julien

+0

@ atmon3r你在使用準備好的語句嗎?當散列不存在時,應該沒有任何理由會得到錯誤,但是十六進制字符串符號確實需要字符串中偶數個數字。你在使用哪種數據庫驅動程序?你能顯示一些你的查詢PHP代碼嗎? – DaveRandom