• ベストアンサー

PostgreSQLでPHPからアップデートができない

PHPからデータをアップデートしようと思ってアップデートを実行するとうまくいきません。エラーも出ずにうまくいっているように思えるのですが、実際データは更新されていません。 で、その際に生成したSQL文を表示するようにしておいてその文をそのままPSQLから入力すると正常に更新されます。 こういう時は何が考えられるのでしょうか?

noname#22928
noname#22928
  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.1

>エラーも出ずにうまくいっているように思えるのですが ここで既に認識が甘いのかもしれません。 php.iniの error_log 項目で設定しているエラーログファイルをphpの該当個所の処理が行なわれた直後に確認してみてください。

noname#22928
質問者

補足

phpinfo()で確認したところerror_logの項目がno value になっていたのですが、これはエラーログはとられていないということなのでしょうか? ちなみにpg_cmdtuplesでチェックしても1となっていました。 更新されてるみたいになっています…。 でもやっぱりされていません…。

その他の回答 (2)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.3

>error_logの項目がno value になっていたのですが... 今後の事も考えて、ログを残す様に設定しておいた方が良いですよ。 #2氏のおっしゃっている様に、phpスクリプトからPostgreSQLへ接続しているユーザの権限を見直してみましょう。

noname#22928
質問者

お礼

すみません。 トランザクションをコミットするのを忘れていました…。

回答No.2

エラーの内容が取れていないようなので、これまでの経験上ということで答えますが。 アップデートをかけようとしているユーザ(この場合は、Webユーザになるのでしょうか)に、Update権限は与えられていますか? PostgreSQLでユーザの権限の設定が必要かもしれません。

noname#22928
質問者

補足

すみません。 トランザクションをコミットするのを忘れていました…。

関連するQ&A

  • php updateできないのです

    PHP初心者です。phpMyAdminでは、実行できたのですが、 PHP文上ではできません。 *************************************************************** $sql = ""; $sql = $sql."update RKTN_WK_TBL set \n"; $sql = $sql."DATA1 = (select count(*) from RKTN_WK_TBL as sub \n"; $sql = $sql." where sub.BKN_CD = RKTN_WK_TBL .BKN_CD) \n"; $affected_rows = $ms->exec( $sql ); $ms->exec("COMMIT"); *********************************************************** ↑うまく更新している。 ↓ここから更新できない *********************************************************** $sql = ""; $sql = $sql."UPDATE RKTN_WK_TBL as rk \n"; $sql = $sql."INNER JOIN (SELECT * FROM GST_KHN_INF_TBL) as gst ON rk.KYKU_NO = gst.KYKU_NO \n"; $sql = $sql." SET rk.GST_ID = gst.GST_ID \n"; $affected_rows = $ms->exec( $sql ); $ms->exec("COMMIT"); ************************************************************ どこがダメなのでしょうか? 先週からハマって困っております。 echo $affected_rowsを見ても 0件のようで表示されません。 だた、phpMyAdminで実行した時に「フォームに入力されていない値があります。」とMSGが表示され その後、更新されています。これが問題なのでしょうか? どなたかご教授いただければ助かります。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHP Mysqli関数でエラー情報を取得する

    はじめまして。 PHPから、Mysqli関数を使用して、5000件のinsert文をMySQLサーバーに投げる処理で困っています。 insert文をセミコロン;で接続して、1つのSQL文にして、executeしています。 あるinsert文でエラーが発生した場合、それ以降のSQL文が実行されずに、PHPに戻ってきてしまいます。マルチクエリの挙動としては、この動きはしょうがないのでしょうか? 5000件のうち、複数のエラー(キー重複や、外部参照キーエラー)があった場合、エラーが起きたデータについてはどのようなエラーであったかが取得でき、それ以降のデータについてはinsertが実行できると言う処理をしたいのですが、このような処理は不可能でしょうか。 ちなみにupdateの場合は、更新対象のデータがなかった場合でもエラーとはならないので5000件文の処理が行われます。 環境は、以下です。 OS:FreeBSD6 PHP:PHP5 MySQL:MySQL5.2 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • postgreSQLで更新後のデータを取得したい。

    postgreSQLで更新後のデータを取得したい。 初めて質問させていただきます。 postgreSQLでupdateした後、更新後のデータをselectで取得したいのですが、 トランザクションが完了するまでにselect文が発行されているみたいで、更新前のデータを取得してしまいます。 それぞれ、違うファイルから投げられているので、同じトランザクションにすることはできません。 何かいい方法があればご教授お願いします。 a.phpで下記のSQLを発行 update test_tbl set test1 = 'aaa' where test2 = 'bbb' a.phpが走っている間に、下記のb.phpが実行される。 select test1 from test_tbl 環境 php5 postgres8.1

  • php,postgreSQLについて

    こんにちわ。初めて投稿します。よろしくお願いします。 現在、postgreSQLで作ったテーブルのデータをつくり、検索フォームで指定した条件(この場合はお店のコード) を、指定先のページに表示させたいのです。 SQLに直接、表示させたいコード番号を入力すれば出るのですが、フォームに入力された値を変数として格納し、SQL文の中に自動にあてはめる方法がわかりません・・。 どうかよろしくお願いします。 phpは4.1です。inp_store_cdは検索フォ-ムでのinput名です。 *表示画面 <?php $conn = pg_connect ("host=localhost port= 5432 dbname=test ); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from store_basic where store_cd=$_POST["inp_store_cd"]"; if (!empty($inp_store_cd)) { $sql = $sql. "and sotre_cd =" .$_POST["inp_store_cd"]; } $result = pg_exec($sql); // selectを実行 if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); ?>

    • 締切済み
    • PHP
  • PHPの5Cに関する文字化け

    またまた文字化けの件で質問です。 Shift_Jisで書いたPHPでMysqlのデータベースにupdateしています。 $sql .= "UPDATE abc SET"; $sql .= " a= '".addslashes($a)."'"; のようなSQL文です。 このような場合 フォームから「表示」を送信した場合は 「update abc SET a='表\示'」となり正常に更新されます。 しかし最後に5Cの文字ある場合 「update abc SET a='テーブル表\'」となり '(シングルクォーテーション)がエスケープされて エラーになってしまいます。 そのような場合はどうしたらよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでPostgreSQLに接続できない。

    PHPでPostgreSQLに接続しようとすると、 エラーメッセージが出て接続できません。 コマンドプロンプトからの接続は可能です。 環境:PHP5、Apache2.2、PostgreSQL8.24 全て同じサーバにインストールしています。 ********************************************* コマンドプロンプト ********************************************* >psql -U postgres -h localhost test >Password for user postgres::testpass >Type: \copyright for distribution terms >\h for help with SQL commands >\? for help with psql commands >\g or terminate with semicolon to execute query >\q to quit > > >test=# ********************************************* ↑問題なく接続できます。 ********************************************* ********************************************* PHP ********************************************* <?php $con = pg_connect("host=localhost dbname=test user=postgres password=testpass"); ?> ********************************************* エラーメッセージ 12行目は「pg_connect」のところになります。 Fatal error: Call to undefined function pg_connect() in C:\Program Files\Apache…test.php on line 12 ********************************************* php.ini ファイルはextension=php_pgsql.dll をアンコメントしてあります。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Mysql UPDATE出来ません

    PHP+MySQLでホームページ開発中ですが、MySQLで特定idのフィールドの更新処理(UPDATE)が出来ません。初心者です宜しくお願いします。 【Mysqlで確認した点】 (1)XAMPP・MyAdminからは以下のSQL文で問題なく更新できる。 "UPDATE upload_list SET rem='ABCDEF' WHERE id=15;" 【問題は?】 以下のphpからは更新できません。 【phpで確認した点は?】 (1)DBへ正常に接続してる。 (2)文字コードも正常にSETしてる。 (3)UPDATE実行後の$RESULT(返り値)がない。 (4)PHPを実行後、MyAdminでDBを確認しても更新されていない。 【phpコード】 <?php //データベースパラメータ定義 $DBSERVER="localhost"; $DBUSER="root"; $DBPASSWORD=""; $DBNAME="up_load"; $DATANAME="upload_list"; //Mysqlに接続 if(mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD)) {echo "DB接続済/";} else {echo "<h2>データベースに接続できません</h2>";die();} //Mysql停止 //データベースを選定 mysql_select_db($DBNAME); //Mysqlの文字セットを定義 $sql = "SET NAMES ujis;"; $result = mysql_query($sql); if ($result==true){echo "文字コードSET済/";} //更新id、rem(更新記事)をSET $id=15; $new_rem="ABCDEF"; echo $DATANAME."/".$id."/".$new_rem."/"; //Mysql更新処理 $result=mysql_query('UPDATE $DATANAME SET rem=$new_rem WHERE id=$id;'); if ($result==true){echo "更新!";} else {echo "更新出来ず";} //XAMMP phpMyAdminからは以下のSQL文で更新できた。 //UPDATE upload_list SET rem='ABCDEF' WHERE id=15; ?> 【実行後のブラウザ表示】 DB接続済/文字コードSET済/upload_list/15/ABCDEF/更新出来ず

    • ベストアンサー
    • MySQL
  • 配列をループさせてUPDATE

    投票システムでチェックボックスから選択されたキーをまとめてUPDATEするには、 どの様なUPDATE文にすれば良いのでしょうか? -------------------------------------------------------------- for ($i = 0; $i < count(@$_POST["answer"]); $i++) { echo $_POST["answer"][$i]."が選択されました"; // ← 一応PHP上で正常に値が返るかを確認しました。 $data = $_POST["answer"][$i]; // ←変数に置き換えました。 $conn = db_conn(); $sql = "UPDATE an SET "; $sql .= " sel" . $data . "cnt = sel" . $data . "cnt + 1"; $sql .= " WHERE id = '" . cnv_sqlstr($id) . "'" ; } -------------------------------------------------------------- という様に書くと、最後にチェックしたキーのみがUPDATEされ、 その他のキーは無視されてしまいます。 echo文でPHP上で正常に走っているかどうかを確認したところ 問題はありませんでしたが、UPDATE文でデータベースに投げると 上手くいきません。 どうかご教示の程よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • php postgres Insert と updateができない

    こんにちは、 現在、php5とpostgresql8でプログラムを行っています。 それで、 $sql = "INSERT INTO t_hoge (name) VALUES('hogesan')"; pg_exec($sql) と、テーブルにデータを入れているんですが、 エラーはでないのに何故かデータがテーブルにインサートできません。 また、アップデートで編集もできません。 しかし、SELECTで既に入力されているデータを読んでprint等で表示させると普通にデータは取れています。 また、telnet等で直接postgresに hoge=> INSERT INTO t_hoge (name) VALUES('hogesan'); と入力するとデータが挿入できます。 なにが問題なんでしょうか。 権限が問題なのでしょうか。 ちなみにテーブル作成するときは CREATE TABLE t_hoge ( name TEXT PRIMARY KEY, info TEXT ); としています。 なにか思い当たる節があれば助言していただきたいのですが。

    • ベストアンサー
    • PHP
  • VBAでoracleDBのupdate

    VBAでoracleDBにupdate(SQL文)でのアップデートができません。なぜでしょうか? ちなみに、insert、select文は何の問題もなく実行することができます。 Err.Numberは3073(更新できないクリエー)でした。 宜しくお願いします。

専門家に質問してみよう