2016-05-16 110 views
0

我在CS50 2014中使用以下功能,當我選擇它時它正在工作,但當我嘗試更新時它不工作。這裏的查詢功能:查詢更新功能不起作用

query(
    "UPDATE users 
     SET pwtxt = ?, pass = ?, dt = ?, reset = ? 
     WHERE usr = ?", 
    NULL, 
    "compass", 
    NULL, 
    0, 
    1 
); 

function query(/* $sql [, ... ] */) 
{ 

    // SQL statement 
    $sql = func_get_arg(0); 

    // parameters, if any 
    $parameters = array_slice(func_get_args(), 1); 

    // try to connect to database 
    static $handle; 
    if (!isset($handle)) 
    { 
     try 
     { 
      // connect to database 
      $handle = new PDO("mysql:dbname=" . DATABASE . ";host=" . SERVER, USERNAME, PASSWORD); 

      // ensure that PDO::prepare returns false when passed invalid SQL 
      $handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     } 
     catch (Exception $e) 
     { 
      // trigger (big, orange) error 
      trigger_error($e->getMessage(), E_USER_ERROR); 
      exit; 
     } 
    } 

    // prepare SQL statement 
    $statement = $handle->prepare($sql); 
    if ($statement === false) 
    { 
     // trigger (big, orange) error 
     // trigger_error($handle->errorInfo()[2], E_USER_ERROR); need to fix array issue 
     exit; 
    } 

    // execute SQL statement 
    $results = $statement->execute($parameters); 


    // return result set's rows, if any 
    if ($results !== false) 
    {  
     return $statement->fetchAll(PDO::FETCH_ASSOC); 
    } 
    else 
    {  
     return false; 
    } 
} 

回答

0

看來你再也不能用null

-1

更新當你的是更新行,你不能使用方法。這就是爲什麼它只與一起工作,請選擇查詢。

With PDO, how can I make sure that an UPDATE statement was successful?

您必須使用rowCount時方法,看看有多少人受到影響您的查詢。順便說一句,我不認爲這是一個好主意,試圖混用不同的查詢類型只有一種方法。返回值爲選擇更新插入刪除是不一樣的。你不能用同一個函數來總結這些。

如果您想要集中您的數據庫連接,我邀請您創建一個PDO子類,您可以在其中對數據庫憑證進行硬編碼。或者你可以創建一個全局的PDO對象或更好的,使用一個單例。這樣,您就可以在任何地方使用您的PDO實例,而無需在所有地方複製數據庫憑據,並使用PDO本地方法進行準備。

+0

它只在結果!= false時使用提取。如果刪除空值,更新將以書面形式運行 – DCR