2011-10-03 39 views
-2

可能重複給出:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP MYSQL警告:請求mysql_query()預計參數1爲字符串,資源在

<?php 
    include 'connect.php'; 
    include 'header.php'; 

    $page = "signup.php"; 
    // receive the invite code: 
    $code = $_POST['code']; 
    $sql = "SELECT codes FROM invites WHERE codes='$code'"; 
    // check the table for matching codes 
    $result = mysql_query($sql); 
    // check if the request returned 1 or 0 rows from the database 
    if (mysql_query($result)) { 
     // end any previously defined sessions. 
     session_start();session_unset();session_destroy(); 
     // start a new session 
     session_start(); 
     // define the session variable. 
     // this allows us to check if it's set later and is required for 
     // the script to run properly. 
     $code = $_POST["code"]; 
     mysql_query("DELETE FROM invites WHERE codes='$code'"); 
     header('Location: '.$page); 
     exit; 
    } else { 
     echo "Invite invalid. Please try again later."; 
     echo $code; 
    } 

    include 'footer.php'; 
?> 

我想實現的邀請系統我正在處理的網頁。然而,當試圖評估是否有包含邀請代碼的行時,我一直沒有收到任何消息或者發出警告。在這種情況下的警告,但如果我將if狀態更改爲== 1,它允許每個人無論代碼和== 0都引發不同的錯誤。

+0

您沒有測試您的查詢是否有錯誤。請參閱mysql_query()上的PHP手冊或[參考資料:什麼是使用mysql擴展的完美代碼示例?](http://stackoverflow.com/q/6198104) –

+0

出於好奇,您從哪裏學習此代碼? ?因爲在SO上顯示的很多mysql_query代碼不會檢查錯誤,儘管PHP手冊中的所有示例都是這樣做的。我想了解爲什麼 –

+0

另外,你的代碼容易受到http://php.net/manual/en/security.database.sql-injection的影響。php –

回答

0

問題是您的查詢。首先,檢查你的聲明,並使用此:

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

,而不是這個

$result = mysql_query($sql); 

所以,你可以看到有沒有在您的SQL查詢的任何錯誤。

+0

中給出null。嘗試了這一點,以及首先不存在的愚蠢錯誤。除了發佈的內容之外,還是沒有骰子或者錯誤。 –

+0

查看@ Ramseyer的回答。 – Eray

3
if (mysql_query($result)) { 

嘗試mysql_num_rows那裏。

+0

我已經改變了我的代碼,但仍然沒有運氣得到「mysql_num_rows()期望參數1是資源,字符串給定」 –

1

這裏有一些錯誤。

1)SQL注入漏洞,請不要直接在查詢中傳遞超全局$ _POST或$ _GET或任何其他用戶提供的變量!最小mysql_real_escape_string()給變量 使用讓它進入查詢或更好看到參數化查詢之前,這是爲了避免SQL漏洞

2)

$result = mysql_query($sql); 
// check if the request returned 1 or 0 rows from the database 
if (mysql_query($result)) .... 

這不檢查的最佳途徑請求返回1個或0行,你應該使用mysql_num_rows()這裏,而不是

if(mysql_num_rows() == 1) //or whatever you need to check 

3)

session_start();session_unset();session_destroy(); 
// start a new session 
session_start(); 

session_start()應該在頁面中的任何內容之前調用。不知道爲什麼這種多餘的召喚,不安,摧毀,在這裏回憶它。如果想要另一個ID,只需使用session_regenerate_id();

正如已經被對方表示,使用一些錯誤報告在查詢中,像

$result = mysql_query($sql) or die(mysql_error()) 

真正看到了什麼故障,地點和原因。

相關問題