简体   繁体   中英

Multiple INNER JOIN broke the query

I'm trying to join multiple table, let me explain better with my query code example:

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, "
        . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, "
        . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, "
        . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes "
        . "FROM table_users "
        . "WHERE table_users.data = 0 "
        . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles "
        . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID "
        . "WHERE table_user_settings.username = ? "
        . "WHERE table_user_settings.password = ? "))
    {
        $stmt->bind_param("ss",$username, $password);
        $stmt->bind_result($id, $email, $GUID, $slug, $id_roles, $address, $city, $state, $zip_code, $notes);
        $result = $stmt->execute();
        $stmt->fetch();
    }

    var_dump($this->db->error);

    $stmt->close();
    return $result;

now the error returned from the query is this:

string(226) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN table_roles ON table_roles.id = table_users.id_roles INNER JOIN table' at line 1"

What is wrong in the query?

You have 3 WHERE clauses in your query, when only 1 is valid and it should go after FROM and INNER JOIN clauses. All conditions in WHERE clause should be separated with AND clause (in this query).

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, "
    . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, "
    . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, "
    . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes "
    . "FROM table_users "
    . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles "
    . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID "
    . "WHERE table_users.data = 0 AND "
    . "table_user_settings.username = ? AND "
    . "table_user_settings.password = ? "))

You might want to check out the valid SQL syntax in MySql doc: http://dev.mysql.com/doc/refman/5.7/en/select.html

There is a syntax error in your query: WHERE table_users.data = 0 this should come after JOIN

if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, "
        . "table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, "
        . "table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, "
        . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes "
        . "FROM table_users "
        . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles "
        . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_user.GUID "
        . "WHERE table_users.data = 0 AND "
        . "WHERE table_user_settings.username = ? AND "
        . "WHERE table_user_settings.password = ? "))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM