2012-01-08 43 views
1

得到變量時,這是我的代碼,但是當我嘗試從URL得到可變我得到這個錯誤:警告:mysql_fetch_array():提供的參數不是一個有效的MySQL結果資源MySQL錯誤的URL

URL變量DEVID是一串長字符,數字,破折號和下劃線。有什麼不對的想法?

<?php 
$con = mysql_connect("server","username","password"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("database", $con); 

$result = mysql_query("SELECT * FROM $user WHERE DEVID=$DEVID"); 


while($row = mysql_fetch_array($result)) 
    { 
    if (($row["FN"]) == NULL){ 
echo '<meta http-equiv="refresh" content="1;url=../register/default.php?user='; 
echo $_GET["user"]; 
echo '&DEVID='; 
echo $_GET["DEVID"]; 
echo '">Please hold, we are taking you to the registration page.<br/><br/>'; 
} 

    } 


mysql_close($con); 
?> 
+0

'echo mysql_error();'就在你的mysql_query和google之後關於sql注入。 PS:有什麼理由向用戶顯示「請保留」頁面,而不是立即重定向? – zerkms 2012-01-08 04:46:36

+0

這是你的完整碼?如果是這樣,我沒有看到任何名爲'$ user'或'$ DEVID'的變量。如果''user'你的意思是一個名爲'user'的表,那麼刪除'$'標誌,然後在while循環前添加另一個檢查 - if($ result)'....... – 2012-01-08 04:46:49

+0

我是要求把在請持.. – austinhollis 2012-01-08 04:51:59

回答

1

如果$ DEVID是一個VARCHAR字段,那麼你就需要圍繞它的單引號在您的SQL查詢:

SELECT * FROM $user WHERE DEVID='$DEVID' 
+0

非常感謝!我是一名學生,仍在學習 – austinhollis 2012-01-08 04:55:08

0

$DEVID在查詢之前被設置了嗎?你沒有使用PHP register_globals,這是來自查詢字符串變量是你嗎?這是2012年!人們什麼時候會停止使用它?

0

執行變量$ USER和$ DEVID具有價值?他們是否已初始化?

假設$ user和$ DEVID已被初始化,錯誤發生是因爲mysql_query返回false,因爲SQL查詢在執行時會生成錯誤。

此外,你不應該使用從URL直接獲得的變量。清理可能存在單個qoutes的值。使用mysql_real_esacape_string()。將mysql_query行替換爲下面的內容以查看SQL錯誤。

$DEVID=mysql_real_escape_string($DEVID); 
$result = mysql_query("SELECT * FROM $user WHERE DEVID='$DEVID'") or die(mysql_error());