0

Herokuでpostgresテーブルを更新しようとしていますが、UPDATEステートメントの偏心によってブロックされています。

私の最初の推測は言うことでした:

$query = pg_query($someDB, $updateQuery);

次に、それがfalseであるかどうかを確認しますが、役に立ちません。面倒なスニペットは次のとおりです。

$update_query = "UPDATE jellybeans SET $form[1]=$data[1], $form[2]=$data[2] WHERE $form[0]='$data[0]'";
echo 'attempting update: ' . $update_query . '<br>';
$update = pg_query($connect, $update_query);
echo "Rows updated: ", pg_affected_rows($update);
//if update failed, push to the table

INSERTS、DELETESなどのステートメントをどのようにチェックしますか?驚いたことに、affected_rowsは意味のあるものを何も返しません。とても有難い。

*編集:* SELECTクエリを最初に使用すると、最良の結果が得られました。

$exists_query = "SELECT * FROM jellybeans WHERE $form[0]='$data[0]'";
$exists = pg_query($connect, $exists_query);
                        if($row = pg_fetch_row($exists)){
                                $update_query = "UPDATE jellybeans SET $form[1]=$data[1], $form[2]=$data[2] WHERE $form[0]='$data[0]'  RETURNING *";
                                echo '<br>' . 'Attempting: ' . $update_query;
                                $update = pg_query($connect, $update_query);
                        }else{
                                $insert_query = "INSERT INTO jellybeans VALUES('$data[0]', $data[1], $data[2])";
                                echo '<br>' . 'Attempting: ' . $insert_query;
                                $insert = pg_query($connect, $insert_query);
                                pg_free_result($insert); 

                        }
                        pg_free_result($exists);
                        pg_free_result($update);

そこから、単純な$ row = pg_fetch_row($ examples)により、信頼できる存在チェックが行われます。将来的には、クエリ自体にIFFOUNDチェックを追加するのがおそらく最善でしょう。

4

2 に答える 2

1

知る方法の 1 つは、更新された行を取得することです。

UPDATE ... WHERE condition RETURNING *;

これにより、更新された行のセットが返されます。結果の数を数えるだけです。

于 2013-03-05T09:39:17.383 に答える
-3

なぜ pg_* 関数を使用しているのですか? 代わりにPDO の使用を検討しましたか? おそらく、PDOStatement::rowCountの方がうまくいくでしょう。

于 2013-03-05T08:51:48.667 に答える