0

我正在尝试在 Heroku 上更新我的 postgres 表,但由于 UPDATE 语句的偏心而被阻止。

我最初的猜测是:

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

然后检查它是否为假,但无济于事。这是麻烦的片段:

$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($exists) 给出了一个可靠的存在检查。将来,最好将 IF FOUND 检查添加到查询本身中。

4

2 回答 2

1

一种了解方法是获取更新的行:

UPDATE ... WHERE condition RETURNING *;

这将返回更新的行集,只计算结果的数量。

于 2013-03-05T09:39:17.383 回答
-3

你为什么还要使用 pg_* 函数?您是否考虑过使用PDO代替?使用PDOStatement::rowCount可能会更幸运。

于 2013-03-05T08:51:48.667 回答