2017-09-16 18 views
1

我想創建一個PHP文件,它可以根據通過POST發送的數據執行不同的MySQL查詢。如果我在執行MySQL查詢的switch語句中添加另一個案例,則會發生致命錯誤:調用成員函數prepare()null。 connection.php包含$ conn。多個MySQL查詢在一個PHP文件

我真的不知道,爲什麼出現這種情況,所以我會很高興,如果有人可以幫助:)

require_once('connection.php'); 

function namecheck($conn, $username) 
{ 
    try { 
     $sql = "SELECT username FROM users WHERE username = ?"; 
     $stmt = $conn->prepare($sql); 
     $stmt->execute(array($username)); 
     $result = $stmt->fetch(); 
    } catch (PDOException $e) { 
     return $sql . "<br>" . $e->getMessage(); 
    } 

    $conn = null; 

    if ($result !== false) { 
     return True; 
    } else { 
     return False; 
    } 
} 

if (isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
    switch ($action) { 

     case 'namecheck': //works 
      $username = $_POST['username']; 
      $result = namecheck($conn, $username); 
      if ($result == True) { 
       echo 'True'; 
      } elseif ($result == False) { 
       echo 'False'; 
      } 

     case 'adduser': //script still works 
      $first_name = $_POST['first_name']; 
      $last_name = $_POST['last_name']; 
      $username = $_POST['username']; 
      $password = $_POST['password']; 

      try { 
       $sql = "INSERT INTO users (username, password) VALUES (?, ?)"; 
       $stmt = $conn->prepare($sql); 
       $stmt->execute(array($username, $password)); 
      } catch (PDOException $e) { 
       return $sql . "<br>" . $e->getMessage(); 
      } 
      $conn = null; 

     case 'test': //Same as above. if added, fatal error 
      $first_name = $_POST['first_name']; 
      $last_name = $_POST['last_name']; 
      $username = $_POST['username']; 
      $password = $_POST['password']; 

      try { 
       $sql = "INSERT INTO users (username, password) VALUES (?, ?)"; 
       $stmt = $conn->prepare($sql); 
       $stmt->execute(array($username, $password)); 
      } catch (PDOException $e) { 
       return $sql . "<br>" . $e->getMessage(); 
      } 
      $conn = null; 
    } 
} 

回答

0

If I add another case to the switch statement, which executes a MySQL query, I get a fatal error: call to a member function prepare() on null.

那是因爲你正在執行$conn = null;聲明在您的每個案例中,主要是因爲您的交換機中沒有break;聲明。沒有任何break;聲明,所有下游情況(從匹配點開始)將被執行。所以你的代碼塊應該是這樣的:

if(isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
    switch($action){ 
     case 'namecheck': 
      ... 
      break; 
     case 'adduser': 
      ... 
      break; 
     case 'test': 
      ... 
      break; 
    } 
}