我正在尝试在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检查。
答案 0 :(得分:1)
了解一种方法是获取更新的行:
UPDATE ... WHERE condition RETURNING *;
这将返回更新的行集,只计算结果数。
答案 1 :(得分:-2)
为什么你甚至使用pg_ *函数?您是否考虑过使用PDO? PDOStatement::rowCount你可能会有更多的运气。