2016-03-04 135 views
0

我有一個MySQL數據庫有三個表:問題與MySQL連接表

  1. 用戶的列表項的
  2. 列表任務表的
  3. 名單說哪些用戶會做哪些任務(連接表)

每天的任務列表都會改變。所以我會在phpmyadmin中手動更改這個任務列表。我想要的是將每項任務分配給每個用戶。我可以看到這是在phpmyadmin中可以手動執行的,但對於多個用戶手動執行此操作並不可行。

我真的很努力地看到我在代碼中做了什麼錯誤。我對PHP真的很陌生。當我發佈正確的URL與郵遞員(我正在做一個API使用苗條)它說沒有錯誤,但當我檢查我的MySQL數據庫的用戶任務表仍然是空的。

這裏是我的index.php代碼:

$app->post('/tasks', function() use ($app) { 

     $headers = apache_request_headers(); 
     $response = array(); 

     if (isset($headers['Authorization'])){ 

     $db = new DbHandler(); 
     $api_key = $headers['Authorization']; 

      if ($api_key == '12345'){ 
        $task_id = $db->createUserTask(); 

      }else{ 
        $response["error"] = true; 
        $response["message"] = "Invalid Api key"; 
        echoRespnse(400, $response); 
        $app->stop(); 
      } 

     }else{ 

      $response["error"] = true; 
      $response["message"] = "Invalid Api Key"; 
      echoRespnse(400, $response); 
      $app->stop(); 
    }     
    }); 

這裏是我的createUserTask功能的代碼是DbHandler的一部分:

public function createUserTask() { 

    $no_users = $this->conn->prepare("SELECT MAX (id) FROM users"); 
    $no_tasks = $this->conn->prepare("SELECT MAX (id) FROM tasks"); 

    if ($no_users >= 0 && $no_tasks >=0){ 
      for($i = 1; $i == $no_users; $i++){ 
        for ($u = 1; $u == $no_tasks; $u++){ 
          $stmt = $this->conn->prepare("INSERT INTO user_tasks(user_id, task_id) values(i, u)"); 
          $result = $stmt->execute(); 

          if (false === $result) { 
            die('execute() failed: ' . htmlspecialchars($stmt->error)); 
          } 
          $stmt->close(); 
        } 
      } 
    } 
} 

你能看到我做了什麼錯誤?

回答

0

我認爲這個問題是與以下3行:

$no_users = $this->conn->prepare("SELECT MAX (id) FROM users"); 
$no_tasks = $this->conn->prepare("SELECT MAX (id) FROM tasks"); 
if ($no_users >= 0 && $no_tasks >=0){ 

的準備()準備要執行的語句,但不執行它,所以如果()將總是爲false。您必須執行()這些語句並從中讀取返回的值。

然而,你可以做一個SQL語句整個事情:

insert into user_tasks(user_id, task_id) 
select users.id, tasks.id from users, tasks 

無需複雜的嵌套循環。插入的select部分產生用戶和任務id的carthesian連接。

+0

感謝您抽出時間幫助。當我嘗試SQL時,我得到500內部錯誤,錯誤是意想不到的。你的意思是把所有的代碼從$ no_users中刪除到createUserTask中if語句的結尾嗎?這個sql是否也將每個任務分配給每個用戶或僅爲一個?再次感謝 – josh

+0

沒有看到你已經嘗試過的東西,很難說出可能出錯的東西。 sugested的sql語句非常注意整個createUserTask()函數。在phpmyadmin中執行它的選擇部分,你會明白它在做什麼。 – Shadow

+0

我在我的代碼中運行該程序。只是在phpmyadmin中嘗試過,它完美運行。我也認爲這種方法比我之前試圖做的更安全。非常感謝。 :) – josh