php postgres UPDATE:检查是否成功

时间:2013-03-05 08:21:20

标签: php postgresql

我正在尝试在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检查。

2 个答案:

答案 0 :(得分:1)

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

UPDATE ... WHERE condition RETURNING *;

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

答案 1 :(得分:-2)

为什么你甚至使用pg_ *函数?您是否考虑过使用PDOPDOStatement::rowCount你可能会有更多的运气。