Reputation: 1105
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?
Upvotes: 1
Views: 41
Reputation: 3329
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
Upvotes: 2
Reputation: 11717
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 = ? "))
Upvotes: 0