2017-05-11 4 views
1

Ich habe Felder id und date als VARCHAR definiert (16)MySQL Abfrage gibt kein Ergebnis

Wenn ich diese Abfrage tun:

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

ich keine Ergebnisse.

Wenn ich es wie folgt tun:

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

Hinweis - ohne Anführungszeichen - ich bekomme das Ergebnis ich erwarte.

EDIT: Hier ist der Code verwendet - ich bin nicht manuell Zitate hinzufügen. Die DB-Klasse von CI fügt sie hinzu.

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(); 
} 

Und ich nenne diese Funktion als:

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

I-Ausgang der Abfrage und die Variablen korrekt abgestimmt, keine Fehler, nur die Zitate.

Jede Idee, warum? Ich hatte dieses Problem nie zuvor. Arbeiten mit CodeIgniter 3 mit dem Abfrage-Generator.

EDIT2: Zusammenfassung der bisherigen Ergebnisse:

  1. Localhost (MySQL 5.6.24) arbeitet, Server (MySQL 5.5.55-0 + deb7u1) nicht.
  2. Das Problem tritt in meinem Code und in PHPMyAdmin auf dem Server auf, funktioniert aber lokal, also beseitige ich ein Code-Problem.
  3. Die show variables like 'char%' Abfrage zeigt alle Zeichensatz-Einstellungen identisch auf lokalen und auf dem Server.
  4. Datenbank und Felder haben die gleiche Codierung sowohl auf dem Server als auch lokal.
  5. Scheint nicht ein Casting Problem zu sein, da viele der Kommentare deuten darauf hin, wie das Problem auf nicht vorhanden ist localhost, nur auf dem Server, es sei denn, der Server-Konfiguration oder andere Probleme hat.
  6. ...?
+0

....Dies ist auf Datentypen = Datum ist eine Zeichenfolge sozusagen, Datum sollte in einfache Anführungszeichen eingeschlossen werden, wenn ID ein int-Feld ist - keine Notwendigkeit für Anführungszeichen, in der Tat überhaupt keine Anführungszeichen, wenn es int ist – ThisGuyHasTwoThumbs

+0

Es ist Typcasting. Zitieren Sie keine Zahlen mit Ausnahme von Datumsangaben – clearshot66

+0

@ThGuyHasTwoThumbs Aber meine Felder sind als Varchar definiert? Ich verwende den Abfrage-Generator von CI, also füge ich keine Anführungszeichen hinzu. Die Bibliothek tut es automatisch ... –

Antwort

1

id könnte als ganze Zahl in Ihrer Datenbank definiert werden. Um mit ganzzahligen Feldern übereinzustimmen, müssen Sie keine Anführungszeichen verwenden. Zitate werden verwendet, wenn Sie mit String- oder Textfeldern übereinstimmen.

+0

Es ist als varchar (16) nicht int definiert. –

-1

Es ist, weil die Anführungszeichen bedeuten, dass es sich um eine Zeichenfolge, während ID-Feld eine ganze Zahl ist und muss ohne Anführungszeichen geschrieben werden.

Gleiches Datum. Intern Datum wird als Integer gespeichert, sondern ist in der Lage String in Daten zu konvertieren, solange sie ein geeignetes Format haben

+0

siehe erste Zeile der Frage. Beide sind definiert als varchar (16) in meiner Tabelle ... –

+0

@KobusMyburgh warten - Ihre ID ist ein varchar (16)?!?! sollte ein auto_increment int (11) Feld nein sein? (allgemeine SQL - nichts mit der Funktion zu tun) – ThisGuyHasTwoThumbs

+0

Sind Sie sicher? Überprüfen Sie erneut Ihre DB-Definition. Ich habe CI für einige Projekte verwendet und nie automatisch Angebote hinzugefügt. Protokolliere deine Anfrage. log_message ('debug', $ query); – Angel

1

Dies sollte es aus der codeigniter Automobilguss gegossen zurück:

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


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

, dass die Ergebnisse in "Sie haben einen Fehler in der SQL-Syntax" - SELECT * FROM ' members' WHERE CAST' id' AS INTEGER) = '44 ...‘ UND 'date' = '...' –

+0

Ich habe es durch meine Datenbank und es funktioniert gut ... haben Sie die CAST (, was Sie kopiert nicht. Wenn Ihre Spalte ist Varchar versuchen, als VARCHAR statt. – clearshot66

+0

Wenn ich INTEGER durch VARCHAR ersetze, erhalte ich einen Syntaxfehler.Wenn ich INTEGER durch CHAR ersetze, läuft die Abfrage, erhält aber kein Ergebnis. –

1

Versuchen Sie, diese

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

Versucht, dass, danke, aber es funktioniert nicht. Die tiefere Frage, obwohl ich verstehe, dass es ein Casting-Problem ist, ist, dass dies auf meinem lokalen Host funktioniert, wie es ist, aber nicht auf dem Server, so dass ich wirklich verwirrt bin. Ich habe mich entschieden, die Benutzereingaben manuell zu bereinigen, und das Problem wurde funktionell gelöst, aber nicht so, wie ich es brauchte. –

+0

Es ist nicht Casting-Problem. Versuchen Sie, Ihre Tabellenstruktur und einige Daten mit Ihrer Frage zu enthalten. –

Verwandte Themen