2012-05-10 76 views
-2

爲什麼不能使用此代碼?如果聲明不能與數據庫一起使用

$welcome = mysql_query("SELECT welcome FROM users WHERE id = '" . $_SESSION['user']['id'] . "'"); 

if($welcome == '0') 
{ 
echo 'register is 0'; 
} 
else 
{ 
echo 'register is 1'; 
} 

$_SESSION['user']['id']順便說一句,返回值爲1。

+0

我們不能幫助您,布魯克,只要您提供的數據儘可能少。你必須自己進一步調試。 'SELECT welcome FROM users WHERE id ='1''的結果是什麼?你確定你想引用該ID嗎? –

+0

是不是obv我想要做什麼... –

+1

也許是因爲用戶名是'Robert'); DROP TABLE學生; - '。 – PeeHaa

回答

3

MySQL在成功時返回resource,錯誤時爲false,而不是查詢中的值。試試這個:

$welcome = mysql_query("SELECT welcome FROM users WHERE id = '" . $_SESSION['user']['id'] . "'"); 
$row = mysql_fetch_assoc($welcome); 
if($row['welcome']== '0') 
{ 
echo 'register is 0'; 
} 
else 
{ 
echo 'register is 1'; 
} 
1

您不應該像這樣構建您的查詢,因爲您不會受到SQL注入攻擊的保護。

$query = sprintf("SELECT welcome FROM users WHERE id = %d", $_SESSION['user']['id']); 
// Perform Query 
$result = mysql_query($query); 

一旦你完成了你,然後需要從結果中提取,你不能只是查詢它。

if(!$result) 
    echo "Error"; // Deal with it 
$row = mysql_fetch_assoc($result); 
echo $row['welcome']; 
mysql_free_result($result); 
0

根據MySQL文檔,如果select語句成功,則返回資源;如果語句失敗,則返回資源。
雖然有實現你想實現什麼更好的,更安全的方式,你的發言可以簡單地修改爲:

 
if($welcome === false) 
{ 
  echo 'register is 0'; 
} 
else 
{ 
  echo 'register is 1'; 
} 

,將工作,但正如我剛纔所說,整個代碼需要更新爲更安全的版本。