2016-08-09 54 views
-2

Ich brauche etwas Hilfe auf PDO. Ich habe einen kleinen Wrapper erstellt, um PDO Funktionalität zu erweitern, ist die Klasse sehr einfach, ich möchte die Aufmerksamkeit auf die select-Methode konzentrieren, die für einfache Abfrage funktioniert, aber wenn ich JOIN in es einfügen scheint PDO wird die Anweisung nicht ausführen . Dies ist die Methode:Syntaxfehler oder Zugriffsverletzung auf PDO

public function select($sql, $array = array(), $fetchMode = PDO::FETCH_ASSOC) 
{ 
    $sth = $this->prepare($sql); 
    foreach ($array as $key => $value) 
    { 
     $sth->bindValue("$key", $value); 
    } 

    $sth->execute(); 
    return $sth->fetchAll($fetchMode); 
} 

Jetzt im Konstruktor ich die Ausnahme aktiviert haben wie:

public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS) 
{ 
    parent::__construct($DB_TYPE.':host='.$DB_HOST.';dbname='.$DB_NAME, $DB_USER, $DB_PASS); 
    $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

ich diesen PDO Wrapper in der Eigenschaft db gespeichert, so kann ich als die select Funktion aufrufen: $this->db, überprüfen Sie die interessiert Abfrage:

$userData = $this->db->select('SELECT id as user_id, email as user_email, role as role_slug 
            FROM users 
            INNER JOIN roles ON roles.id = users.role 
            INNER JOIN user_settings ON user_settings.id_user = user.id 
            WHERE company = :company, username = :username, password = :password', 
            array(':company' => $company, ':username' => $username, ':password' => $password)); 

Wie Sie ich versuche, diesehen wählendes Benutzers auf der Tabelle users, muss ich auch die Rolle auf der anderen Tabelle namens roles und die Benutzereinstellung auf die Tabelle user_settings bekommen. Jetzt ist die username auf dem Tisch user_settings, für eine komplette Struktur genannt:

Benutzer

id|id_company|first_name|last_name|email|mobile_phone 

user_settings

id_user|username|password 

Rollen

id|name 

Ich weiß wirklich nicht, was dieser Fehler bedeutet. Wer weiß, was ich falsch mache?

Danke, und Entschuldigung für Fehler, ich bin neu auf dieser Website.

+1

, was der Fehler und Fehlercode ist ..... – NDM

+0

Sie sind nicht die mit 'WHERE 'Klausel richtig. Die Syntax lautet 'WHERE col_1 = 'x' UND | ODER col_2 = 'xy'' usw. http://dev.mysql.com/doc/refman/5.7/en/select.html - Zum Schließen als Tippfehler gewählt. –

+0

@NDM Sorry ich vermisse es, dies in der Frage hinzuzufügen. –

Antwort

1
WHERE company = :company, username = :username, password = :password 

ist falsch, Sie nicht , zu trennen Bedingungen verwenden können, verwenden AND oder OR

WHERE company = :company AND username = :username AND password = :password