2015-05-08 74 views
0

試圖在PHP和MySQLi中啓動一個函數,以便在用戶激活時返回TRUE(1)或者FALSE是用戶未激活(0)。MySQLi中的進程激活函數?

我測試了這些代碼,並沒有運氣,得到MySQLi錯誤。記住,我是MySQLi的新手。

function get_activated($mysqli, $userid) { 

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array(); 
    if($row){ 
     $activated = TRUE; 
     return $activated; 
    } 
} 

function get_activated($mysqli) { 

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array(); 
    if($row){ 
     $activated = TRUE; 
     return $activated; 
    } 
} 

function get_activated($mysqli, $userid) { 
    if(isset($_SESSION['userid'])) { 
     $userid = $_SESSION['userid']; 
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array(); 
    if($row){ 
     $activated = TRUE; 
     return $activated; 
    } 
    } 
} 

function get_activated($mysqli) { 
    if(isset($_SESSION['userid'])) { 
     $userid = $_SESSION['userid']; 
    $row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array(); 
    return $row["activated"]; 
    } 
} 

我打電話這樣的功能:

get_activated($userid); 
       echo $activated; 
       exit(); 

get_activated(); 
      echo $row['activated']; 
      exit(); 

如果任何人都可以點我在正確的軌道在這裏我會很感激,謝謝!

錯誤例子:

缺少參數2 get_activated() 呼叫一個成員函數查詢()非對象上 只有變量應該通過引用 缺少參數1用於傳遞get_activated()

+1

爲什麼你有這麼多被命名爲相同的函數? ('get_activated()')?另外,當你返回一個變量時,它被設置爲賦值給某個東西,而不是像你正在嘗試的那樣調用......它應該是這樣的:'$ activated = get_activated($ userid);' – Darren

+1

顯示mysqli錯誤。 – ihsan

+0

請將您遇到的錯誤置於問題中。 –

回答

1

我認爲你正在尋找的東西,如:

function get_activated($mysqli, $userid) { 
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '$userid' AND activated = '1'")->fetch_array(); 
    if(!empty($row)){ 
     return true; 
    } 
    return false; 
} 

的fetch_array()方法的MySQLi將返回null如果它發現沒有行,我就是喜歡USI因爲你已經擴展了MySQLi並以某種方式改變了功能 - 我在意外之前做了這些。

此外,當你再調用這個函數,你應該使用 -

$activated = get_activate($mysqli,1); 
var_dump($activated); 

在一個側面說明,我總是會用準備好的語句,但是那不是這個問題。

+0

非常感謝!第一次工作,正是我所尋找的 - 在附註中,你已經進入($ mysqli,1);調用函數,只是告訴它調用$ userid?就像在老版本的MySQL中一樣,我記得通過它們發送變量的函數,比如我的問題get_activated($ userid)中的變量; etc ... – Aidanpt6

+0

我只是舉了一個例子userid,我推測這是一個1,是的,你應該使用$ userid。 –

1

因此,讓我們把這些一一

function get_activated($mysqli, $userid) { 

    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array(); 
    if($row){ 
     $activated = TRUE; 
     return $activated; 
    } 
} 

所以+1用於注入mysqli類,但你正在尋找只如果查詢成功。請記住,一個查詢可以成功並返回0行。如果查詢成功,您也只有return。您應成功返回true,並返回false

功能#2令人困惑,因爲它省略了$userid並遭受同樣的問題。

function get_activated($mysqli, $userid) { 
    if(isset($_SESSION['userid'])) { 
     $userid = $_SESSION['userid']; 
    $row = $mysqli->query("SELECT * FROM users WHERE userid = '{$userid}' AND activated = '1'")->fetch_array(); 
    if($row){ 
     $activated = TRUE; 
     return $activated; 
    } 
    } 
} 

所以現在我們有$_SESSION值,但仍然可以通過$userid作爲參數(這是混淆)。然後我們看看query是否返回任何值。這是更好的方式,但將query鏈接到fetch_*的方式很糟糕,因爲如果查詢失敗,則會出現致命錯誤。

function get_activated($mysqli) { 
    if(isset($_SESSION['userid'])) { 
     $userid = $_SESSION['userid']; 
    $row = $mysqli->query("SELECT activated FROM users WHERE userid = '{$userid}'")->fetch_array(); 
    return $row["activated"]; 
    } 
} 

所以同樣的問題與$userid爲#3,並與鏈接相同的問題,但我們更近,因爲我們至少返回一個值。但是,它又不考慮如果查詢返回0行會發生什麼情況。

讓我們寫一個全功能的作品現在

function get_activated($mysqli, $userid) { 
    $uid = $mysqli->real_escape_string($userid); 
    $result = $mysqli->query("SELECT * FROM users WHERE userid = " . $uid . " AND activated = '1'"); 
    $data = $result->fetch_assoc(); 
    return ($data) ? true : false; 
} 

所以,首先我們清理$userid。然後我們對它做一個查詢。之後,我們尋找一個返回的行,如果我們做了或沒有返回布爾值。現在我們可以像這樣使用

if(get_activated($mysqli, $userid)) { 
    echo 'Activated'; 
} else { 
    echo 'Not activated'; 
} 
+0

感謝您花時間向像我這樣的新手詳細解釋,如果有更多人以這種方式提供幫助,我們的新手很快就會成爲專家,我已經通過每個示例學到了很多知識,將會回到使用你的建議工作,並嘗試一點點,我感謝幫助! – Aidanpt6