2017-05-11 286 views
1

我定義爲VARCHAR(16)MySQL查詢不返回結果

領域iddate當我做這個查詢:

SELECT * 
FROM `members` 
WHERE `id` = '4412040999876' 
AND `date` = '201706054783' 

我沒有得到任何結果。

當我這樣做是這樣的:

SELECT * 
FROM `members` 
WHERE `id` = 4412040999876 
AND `date` = 201706054783 

注 - 無報價 - 我得到我期待的結果。

編輯:這是使用的代碼 - 我不是手動添加引號。 CI的DB類正在添加它們。

public function get_member_match($id, $mem, $field = 'name') 
{ 
    $sql = " 
     SELECT * 
     FROM `members` 
     WHERE `id` = ? 
     AND `" . $field . "` = ? 
    "; 
    $sql_array = array($id, $mem); 
    $q = $this->db->query($sql, $sql_array); 
    return $q->result_array(); 
} 

我調用這個函數爲:

$this->members_model->get_member_match($id, $date, 'date'); 

我輸出的查詢,變量正確匹配,沒有錯誤,只有報價。

任何想法爲什麼?我以前從未遇到過這個問題。使用Query Builder處理CodeIgniter 3。

EDIT2:結果摘要迄今:

  1. 本地主機(MySQL的5.6.24)的作品,服務器(MySQL的5.5.55-0 + deb7u1)沒有。
  2. 問題發生在我的代碼和服務器上的PHPMyAdmin,但在本地工作,所以我消除了代碼問題。
  3. show variables like 'char%'查詢顯示所有在本地和服務器上相同的字符集設置。
  4. 數據庫和字段在服務器和本地都具有相同的編碼。
  5. 似乎並不像許多評論所指出的那樣是個問題,因爲問題不在本地主機上,只存在於服務器上,除非服務器有配置或其他問題。
  6. ...?
+0

....這是數據類型=日期是一個可以說話的字符串,日期應該用單引號包裝,如果id是一個int字段 - 不需要引號,實際上,如果它是int – ThisGuyHasTwoThumbs

+0

它是類型轉換。不要引用除日期 – clearshot66

+0

@ThisGuyHasTwoThumbs以外的數字但是我的字段被定義爲varchar?我使用CI的查詢生成器,所以我實際上並沒有添加任何引號。他們的圖書館正在自動... –

回答

1

id可能被定義爲數據庫中的整數。要匹配整數字段,您不需要使用引號。當您匹配字符串或文本字段時使用引號。

+0

它被定義爲varchar(16)而不是int。 –

-1

這是因爲引號暗示它是一個字符串,而id字段是一個整數,並且必須寫成不帶引號。

相同的日期。內部日期存儲爲一個整數,但是能夠字符串轉換爲日期,只要有合適的格式

+0

看到問題的第一行。兩者在我的表中被定義爲varchar(16)... –

+0

@KobusMyburgh等待 - 你的id是一個varchar(16)?!?!應該是auto_increment int(11)字段否? (一般SQL - 與功能無關) – ThisGuyHasTwoThumbs

+0

你確定嗎?再次檢查您的數據庫定義。我爲一些項目使用CI,並且從不自動添加引號。記錄您的查詢。 log_message('debug',$ query); – Angel

1

這應該將它轉換回從CodeIgniter的自動施放:

SELECT * 
FROM `members` 
WHERE `id` = '4412040999876' 
AND `date` = '201706054783' 


SELECT * 
FROM `members` 
WHERE CAST(`id` as INTEGER) = '4412040999876' 
AND `date` = '201706054783' 
+0

導致 「你在你的SQL語法錯誤」 - SELECT * FROM 'members' WHERE CAST'id' AS INTEGER)= '44 ...」 AND'date' ='...' –

+0

我是通過我的數據庫完成的,它運行正常......你有CAST(你複製的東西沒有,如果你的列是varchar,則嘗試將其轉換爲VARCHAR。 – clearshot66

+0

當用VARCHAR替換INTEGER時,我得到語法錯誤。用CHAR替換時,查詢運行,但沒有結果。 –

1

嘗試使用這個

$this->db->from('members'); 
$this->db->where('id',$id); 
$this->db->where($field,$mem); 
$q = $this->db->get(); 
return $q->result_array(); 
+0

試過,謝謝,但它不起作用。更深層次的問題,儘管我明白這是一個鑄造問題,但是這是在我的本地主機上工作,而不是在服務器上,所以我非常困惑。我決定手動清理用戶輸入,問題在功能上得到解決,但不是我需要它的工作方式。 –

+0

它沒有鑄造issue.Try包括您的表結構和少數數據與您的問題。 –