2014-03-06 231 views
2

我是mysql和php的新手。從多個表中選擇所有值

我有兩個表'成員'和'點'。他們都包括「用戶名」列。我想從這兩個表中選擇所有的值,其中username = $ POST [username]。

所以我寫了這個,但這是行不通的。

$username = $_POST['username']; 
$sql = $con->prepare("SELECT *.members, *.points FROM members, points WHERE 
username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

我試過這樣:

$sql = $con->prepare("SELECT * FROM members INNER JOIN points 
ON username.points = username.members WHERE username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

這:

$sql = $con->prepare("SELECT *.points, *.members FROM members INNER JOIN points 
ON username.points = username.members WHERE username=?"); 
     $sql->bind_param("s", $username); 
     $sql->execute(); 
     $result = $sql->get_result(); 
     $row = $result->fetch_assoc(); 

我不能使用UNION因爲columbs的數量在這些表中equel。

那麼,請幫助我什麼是錯的代碼?從多個表中選擇全部的正確方法是什麼?

+2

+1使用準備好的語句並綁定變量。 – Aaron

回答

1

別名是爲了用來指定那些列屬於哪個表,所以你需要預先表名的列

SELECT * FROM members 
INNER JOIN points 
ON points.username = members.username 
WHERE points.username = ? 

,而選擇另外您也可以一個別名分配給你的表,並使用它們

SELECT * FROM members a 
INNER JOIN points b 
ON a.username = b.username 
WHERE a.username = ? 
+0

謝謝你的回答,它運行良好(:。我沒有使用別名,就像你的第二個建議。使用別名有什麼好處,除了節省時間? – ctarimli

+2

其實它是相同的,使用短別名可以節省時間長查詢雖然 – Fabio

1

你接近這個:

SELECT *.points, *.members 
FROM members 
INNER JOIN points ON username.points = username.members 
WHERE username=? 

試試這個:

SELECT * 
FROM members 
INNER JOIN points ON members.username = points.username 
WHERE members.username=? 
+0

什麼是'* .points,* .members'?我認爲它應該是相反的'points。*,members。*' – Fabio

+0

@Fabio你是對的,我不小心從OP的問題中粘貼了 – Aaron

0

檢查這個 SELECT * FROM pointsmembers WHERE pointsusername =「'。$ _ POST ['username']。'」AND membersusername =「'。$ _ POST ['username']。'」; 你可以檢查這個查詢,它非常簡單。

+0

OP已經使用了一個準備好的語句,爲什麼要把他帶回SQL容易受到攻擊的東西呢?另外,這告訴OP使用ANSI-89 JOIN表示法,ANSI-92標準已經存在了20多年,那麼現在是不是我們都開始明確說明我們的JOIN? – Aaron

+0

這只是一個邏輯,sql如何工作取決於使用。 –