2011-06-04 141 views
1

所以我試圖以多對多的關係獲取數據。PHP從MySQL數據庫中提取數據

到目前爲止,我有這個,它發現用戶:

$user = $_SESSION['user']; 
$userID = mysql_query("SELECT * FROM users WHERE user='$user'") or die(mysql_error()); 

而且我知道,爲了呼應這個信息我必須把它放在一個數組,像這樣:

while ($r = mysql_fetch_array($userID)) { 
echo $r["0"]; 
} 

該作品很好,但是當我嘗試在另一個表中找到這個變量時,我不確定要用什麼作爲變量:

$projects = mysql_query("SELECT projects_ID FROM projects_users WHERE users_ID='???'") or die(mysql_error()); 

我試過更換?與$ userID和$ r,但無濟於事。我知道代碼的工作原理,因爲當我手動輸入用戶ID時 - 我在哪裏出錯了?

+0

您的SQL查詢很容易受到SQL注入。看到這個:http://segfaultlabs.com/files/pdf/php-session-security.pdf – technology 2011-06-04 11:33:01

回答

1

您可以使用一個查詢得到你的項目:

$user = mysql_real_escape_string($_SESSION['user']); 

$query = mysql_query("SELECT pu.projects_ID FROM users u 
      INNER JOIN projects_users pu ON (pu.users_ID = u.users_id)  
      WHERE u.user='$user'") or die(mysql_error()); 

$result = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)) { 
    echo $row['projects_ID']; 
} 
2

未經檢驗的,但這應該工作:

$user = mysql_real_escape_string($_SESSION['user']); 
$query = mysql_query("SELECT * FROM users WHERE user='$user'") or die(mysql_error()); 

$result = mysql_fetch_array($query); 
$userID = $result[0]; 

$projects = mysql_query("SELECT projects_ID FROM projects_users 
    WHERE users_ID='$userID'") or die(mysql_error()); 
+0

編輯你的答案來修復SQL注入漏洞。 – Johan 2011-06-04 12:55:20

+0

-1,$ project = mysql_query不起作用! – Johan 2011-06-04 13:01:44

2

我你的情況,你需要將$ R [0]那裏。

2
$user = $_SESSION['user']; 
$query = mysql_query("SELECT * FROM users WHERE user='".mysql_real_escape_string($user)."' LIMIT 1") or die(mysql_error()); //--note the LIMIT 

$result = mysql_fetch_array($query); 
$userID = $result[0]; 

$projects = mysql_query("SELECT projects_ID FROM projects_users WHERE users_ID='$userID'") or die(mysql_error()); 
1

我認爲,當你想在數組形式獲取數據的代碼是對初學者很有幫助

我們使用的mysqli替代的MySQL保護您的數據免受SQL注入。

使用前這段代碼檢查數據庫連接第一

<?php $tableName='abc'; 

$qry="select * from $tableName"; 

$results=mysqli_query($qry); 

while($records=mysqli_fetch_array($results)) 

{ 
$firstrecord=$records[1]; 

$secondrecord=$records[2]; 

} 

?>