php
  • sqlite3
  • 2017-03-20 7 views 0 likes 
    0

    条件を使用して値を更新しようとする関数を作成しました。何か問題が生じた場合、INSERTを試みます。SQLite3とPHPを使用して「更新」エラーを取得

    コードは以下の通りです:残念ながら

    if(!$result=$this->query("UPDATE collect_data_settings SET setting_value ='".$setting_value."' WHERE collect_point = '".$collect_point."' AND setting_name='".$setting_name."';")) 
         $result=$this->query("INSERT INTO collect_data_settings ('collect_point','setting_name','setting_value') VALUES ('".$collect_point."','".$setting_name."','".$setting_value."');"); 
    

    、UPDATEクエリは、条件が満たされない場合でもfalseを返すことはありませんいくつかの理由。誰か助けてくれますか?

    答えて

    0

    collect_point(これは一意のキーであると仮定します)変数を最初に検索して、データベースにまだ格納されていない場合はINSERT文を使用し、UPDATE文を使用しないのはなぜですか。例:

    $db = new SQLite3('database.db')  
    $check = $db->query("SELECT * FROM collect_data_settings WHERE collect_point = '$collect_point'") 
    $check_query = $check->numRows(); 
    
    if($check_query > 0) { 
        *Your UPDATE query* 
    }else { 
        *Your INSERT query* 
    } 
    
    +0

    それとも、collect_pointとSETTING_NAMEだけではなくcollect_name – DBeck

    +0

    の両方を検索することができ、それをより正確にするためには、SQLit3の機能を持っていませんnumRows()。 @CLで述べたchanges()関数を使って解決します。 –

    0

    UPDATEステートメントは、WHERE条件に一致するすべての行を変更します。最終的な数字は重要ではありません。一致する行がなくても、すべての行が正常に検査されました。

    は使用し、変更された行数を調べるにchanges() function

    $this->exec("UPDATE ... WHERE ..."); 
    if ($this->changes() == 0) 
        $this->exec("INSERT ..."); 
    
    +0

    ありがとう、それは助けた。 –

    関連する問題