2016-05-16 5 views
0

私はCS50 2014の次の関数を使用していますが、SELECTを実行しても機能していますが、UPDATEを実行しようとすると機能しません。ここでは、クエリと機能があります:クエリ更新機能が動作しません

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

あなたはあなたがメソッドを取得使用することはできません行を更新しているとき、あなたは、もはやNULLS

-1

で更新することができます表示されません。そのため、とのみ動作します。クエリを選択してください。

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

あなたはあなたのクエリによって影響を受けているどのように多く見ることをrowCountメソッドを使用する必要があります。ところで、1つのメソッドで異なるクエリタイプを混在させることをお勧めします。 の戻り値はを挿入更新を選択するかは同じではありません削除します。同じ関数でこれらを集計することはできません。

データベース接続を集中管理する場合は、PDCの子クラスを作成して、DB資格情報をハードコードすることができます。または、グローバルPDOオブジェクト以上を作成し、シングルトンを使用することもできます。これにより、DB資格情報を複製したり、PDOのネイティブメソッドを準備したりすることなく、どこでもPDOインスタンスを使用することができます。

+0

結果を取得するのはfetch if!= falseだけです。この更新プログラムは、nullを削除すると書かれたとおりに動作します – DCR

関連する問題