2013-03-09 79 views
1

我使用的PDO驅動程序的PHP框架CodeIgniter的..PDO更新Unsuccessfull

我有兩個疑問,我要運行一次有人點擊「提交」按鈕。

一個是插入下一個(問題查詢)是更新。

這是在我的模型代碼片段:

function studenttime($anum) { 
    try { 
     $times = NULL; 

     $sql = "UPDATE student SET last_visit = :times WHERE anum = :anum"; 
     $time = $this -> db -> conn_id -> prepare($sql); 
     $time -> bindParam(':times', $times); 
     $time -> bindParam(':anum', $anum); 
     $time -> execute(); 
     if ($time -> rowCount() == 1) { 
      return $time; 
     } 

    } catch (PDOException $e) { 
     error_log($e -> getMessage()); 
     die("An Error Occured, Contact System Admin - Err: SFM136"); 
    } 
} 

這是我的控制器:

} else { 
       if ($session = $this -> staff_model -> session($anum, $why, $aidyear, $comments) && $time = $this -> staff_model -> studenttime($anum)) { 

        $this -> session -> unset_userdata('anum'); 
        $this -> session -> unset_userdata('first'); 
        $this -> session -> unset_userdata('last'); 
        $this -> session -> unset_userdata('aidyear'); 
        $this -> session -> unset_userdata('why'); 
        $this -> session -> unset_userdata('comments'); 

        redirect('staff_controller/studentlogin', 'location'); 
       } 
      } 

調用$會話=會議在我的模型工作得很好,第一個查詢...

然後我嘗試通過使用& &在一個else語句中嘗試兩個查詢,但似乎並不認爲第二個查詢甚至會影響o if語句的成就。

我看不到我在做什麼錯在這裏爲我的控制器與一幫這些還挺代碼片段散落,所以我不能看到問題與這個特殊的一個。

回答

0

的問題實際上是從我的其他方法發生在我的模型:

function checkanum($anum) { 
     try { 
      $sql3 = "SELECT * FROM student WHERE anum = : anum"; 
      $check = $this -> db -> conn_id -> prepare($sql3); 
      $check -> bindParam(':anum', $anum); 
      $check -> execute(); 
      if ($check -> rowCount() == 1) { 
       return $check; 
      } 
     } catch (PDOException $e) { 
      error_log($e -> getMessage()); 
      die("An Error Occured, Contact System Admin - Err: ST_M79"); 
     } 
    } 

這等於== 0,應該是1

我的控制器是檢查是否已經創紀錄是否存在,如果確實存在,則只需更新再次查詢的時間。當我故意拼錯if語句中的任務之一時,我發現它沒有給出錯誤,這給了我確定我的邏輯有缺陷所需的信息。現在所有的工作都很完美。

感謝您的輸入。我喜歡另外,奧斯卡說:

這應該更好地工作:

IF(($會議= $這個 - > staff_model - >會話($ ANUM,$爲什麼,$ aidyear, $評論))& &($時間= $這個 - > staff_model - > studenttime($ ANUM))){

我會建議您避免在if語句一樣 ,僅僅因爲,這是混亂的多任務!

很有意義。 +1

1

這是由於運營商的優先權。

嘗試運行這段代碼中的示例:

if ($a = 5 && $b = 6) { 
    var_dump($a); // Output: bool(true) 
} 

爲什麼?因爲它與此相同:

if ($a = (5 && $b = 6)) { 
    var_dump($a); // Output: bool(true) 
} 

故事的道德:在if語句和類似語句中放置括號。

這應該更好地工作:

if (($session = $this -> staff_model -> session($anum, $why, $aidyear, $comments)) && ($time = $this -> staff_model -> studenttime($anum))) { 

我會建議您避免在if語句這樣的多任務僅僅是因爲,嗯,這是令人困惑!

+0

這也沒有工作。我所有的查詢,除了我在OP工作中發佈的那個。這真的很奇怪... – RaGe10940 2013-03-09 19:03:02

0

你應該讓if語句更容易閱讀,既爲您和其他人誰去閱讀代碼的。此外,不要將值賦給if語句中間的變量,因爲編程語言可以處理變量,if語句中的賦值並不意味着它會返回以你認爲他們將要工作的方式工作。

$a = $session = $this -> staff_model -> session($anum, $why, $aidyear, $comments); 
$b = $time = $this -> staff_model -> studenttime($anum); 

現在你可以做類似的事情了。

if($a && $b) 
{ 
    //... 
} 

如果你真的想取消設置你有活躍會話,那麼你可以使用

session_destroy(); 

但如果你只是想摧毀一個子集的話,當然,做到這一點你這樣做的方式。

我不知道,如果一個$和$ b我張貼的(從你複製/粘貼)是正確的,但我的觀點很簡單,一旦你組織你的代碼更好,然後變得更容易破解的難題。