我正在尝试在 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 检查添加到查询本身中。