2012-09-19 10 views
7

DBに名前、番号、会社を挿入しています。新しい行を作成しない場合は、行が更新されています。

私のテーブルには、単純です:

id(primary key) 
name 
slideView 
company 

このデータを使用して新しい行を作成しない場合、私は、それに渡された名前が存在する場合は、この情報を更新する必要があります。私はREPLACE INTOを見てきましたが、それは私のために働くとは思わない... IDに触れないでください。

私のコードは次のとおりです。

insertData($name,$count,$company); 

function insertData($name, $count, $company) { 

    #Try/Catch statement to connect to DB, and insert data 
    try { 
     #DB username/password 
     $usernameDB = '****'; 
     $passwordDB = '****'; 

     #Create new PHP Database Object with the address, username, and password as parameters 
     $pdo = new PDO('mysql:host=localhost;dbname=*****', $usernameDB, $passwordDB); 

     #Set pdo attributes to handle errors 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     #assign the sth variable (sth means statement handle) to insert the data 
     $sth = $pdo->prepare("REPLACE INTO ***** SET name = ?, slideView = ?, company = ?"); 

     #Execute the insert 
     $sth->execute(array($name,$count,$company)); 

    #Error if can't connect or insert 
    } catch(PDOException $e) { 
     echo 'Error: ' . $e->getMessage(); 
    }#/try 
} 

私はSQLとhavntに新たなんだが、まだこれを行うには良い方法を見つけました。

答えて

2

REPLACE INTOはうまくいくはずです。また、UNIQUE制約を持つ列もチェックされます。だから、mark your name column as uniqueにするだけでREPLACE INTOは重複していると認識します。

私はこの特定のユースケースを試していませんが、文書によって許可されているようです。

+0

私は元々持っていたものに戻ることにしました。それは私の名前の列を一意にマークした後に働いた。ありがとう! – mdance

4

これにはinsert ... on duplicate updateの構文を使用する方が良いかもしれませんが、いくつか余分なパラメータを渡すことを意味しますが、特定のproblems in the replace intoの構文が切り詰めているように見えることがあります。彼らはこれまで読みそんなに簡単です(

$sth->execute(array(':name' => $name, ':slideView' => $count, 
    ':company' => $company, ':slideView2' => $count, ':company2' => $company)); 

フォーマット上記の名前使用しPARAMATERS:

REPLACE INTO ***** SET name = ?, slideView = ?, company = ? 
は以下のように記述できます。

insert into yourTableName (name, slideView, company) 
    values (:name, :slideView, :company) 
    on duplicate key update set 
     slideView=:$slideView2, company=:company2 

し、このように行われている実行します/ debug)、新しい行をデータベースに挿入します。または、ユニーク/プライマリキー列nameにすでに値がある場合は、残りの情報で行を更新します。

クエリでパラメータを2回使用できないため、ここでは2つのパラメータを使用する必要があります(slideViewと会社は同じ情報を含みます)。

+0

これは正しいようです。エラー:SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 '1行目でSET slideView = NULL、company = NULL'の近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルを確認してください。 – mdance

+0

また、MySQLバージョン5.1.61を実行しています – mdance

+0

'SET'を削除しました。クエリは実行されましたが、何も更新されませんでした。毎回新しい行を追加し続けました。 – mdance

関連する問題