9

フィールドが見つからない場合にフィールドを挿入する単純な PHP PDO 更新関数を作成しようとして、この小さなスニペットを作成しました。

function updateorcreate($table,$name,$value){
    global $sodb;
    $pro = $sodb->prepare("UPDATE `$table` SET value = :value WHERE field = :name");
    if(!$pro){
        $pro = $sodb->prepare("INSERT INTO `$table` (field,value) VALUES (:name,:value)");
    }
    $pro->execute(array(':name'=>$name,':value'=>$value));
}

ただし、更新機能が機能するかどうかは検出されません。これを機能さif(!$pro);せるにはどうすればよいでしょうか。

4

5 に答える 5

20

$pro実行ステートメントではなく、準備に割り当てています。

そうは言っても、mysqlを使用している場合は、insert... on duplicate key update構文を使用できます。

insert into $table (field, value) values (:name, :value) on duplicate key update value=:value2

同じバインド パラメータを 2 回使用することはできませんが、2 つのバインド パラメータを同じ値に設定することはできます。

編集: この mysql 構文は、キー (プライマリまたは別の一意) が存在する場合にのみ機能し、挿入が失敗する原因となります。

于 2012-09-05T14:31:30.833 に答える
2

mysql のみの場合は、 INSERT INTO ... ON DUPLICATE KEY UPDATE を試すことができます

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2012-09-05T14:34:06.970 に答える
0

最初にそれを実行する必要があります。

それとは別に、これはこれを行う危険な方法です。トランザクションを開始し、SELECT を実行してから、何を行うか (INSERT または UPDATE) を決定する方がよいでしょう。UPDATE クエリが成功したかどうかを確認するだけでは十分ではありません。行が見つからない場合も成功します。

于 2012-09-05T14:31:03.337 に答える
0

試す、

    PDO::exec() 

挿入された場合は 1 を返します。行が更新された場合は 2。

準備済みステートメントの場合、

    PDOStatement::execute() 

あなたが試すことができます、

    PDOStement::rowCount()
于 2012-09-05T14:36:48.790 に答える