• 締切済み

変数の中身は確認できているが、更新がうまく出来ない

echo "TID:".$TID; //TIDを親テーブルに登録する $update_total = $mysqli->query("UPDATE EDIT_TOTAL SET TID='$TID' WHERE KEYID='$KEYID'"); /* トランザクションをコミットします */ if (!$mysqli->commit()) { print("Transaction commit failed\n"); exit(); } 変数の中身も問題なく、エラーも出ていないのですが、1回目のボタンだと反映されず、2回目だと正常に反映されることが多々あります。 どなたかご教示頂けると幸いでございます。 ※そんなことも知らないのかよという書き込みはご遠慮しておりますのでよろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • hymat
  • ベストアンサー率58% (95/162)
回答No.1

これだけじゃ原因はわかりませんね。下記やってみても問題は起こりません。 $KEYIDの値がDB上に存在しないとか、DBの表定義とか、ここに書いてない部分の問題でしょう。 <?php $mysqli = new mysqli('localhost', 'user', 'pass', 'database'); if ($mysqli->connect_error) { echo $mysqli->connect_error; exit(); } $TID=101; $KEYID=1; $update_total = $mysqli->query("UPDATE EDIT_TOTAL SET TID='$TID' WHERE KEYID='$KEYID'"); if (!$mysqli->commit()) { print("Transaction commit failed\n"); exit(); } $mysqli->close(); ?> ついでながら、普通phpでは変数名は小文字で、大文字は定数に使います。また「ご遠慮しております」じゃなくて「ご遠慮ください」か「お断りしています」だと思いますよ。

関連するQ&A

  • トランザクションについて

    MySQLバージョン4.1.16を使っています。 トランザクションは2つに分けて行う場合と1つで済ませる場合とでは どちらが良い悪いなど違いはあるのでしょうか? できれば1つで済ませれば良いのでしょうが、 2つに分けなければいけない状態の時に、何か注意する点など出てくるのでしょうか? START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; COMMIT; START TRANSACTION; UPDATE table2 SET b=1 WHERE type=1; COMMIT; それか START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; UPDATE table2 SET b=1 WHERE type=1; COMMIT;

    • ベストアンサー
    • MySQL
  • php + MySQLでデータ削除 更新

    一覧画面に更新、削除というボタンをつくり番号を受け取って削除したいのですが、削除ボタンを押しても画面は変わるのですが削除されません 助けてください 番号 int プライマリーキー 氏名 varchar 住所 varchar 一覧画面のソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=post>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<form action=sakujo.php method=post>"; echo "<td><input type=submit value=削除></td>"; echo "</form>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 削除ソース  sakujo.php <html> <body> <? // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // DELETE文を実行 $sql = "delete from tbl_test where '番号'= 番号; if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データベースから切断 mysql_close($con); // 登録完了メッセージの表示 echo "削除完了"; ?> </body> </ht

    • 締切済み
    • PHP
  • mysql データ更新

    一覧画面に更新ボタンを作成しました 更新ボタンを押すとkoushin_input.phpにデータを渡し入力フォームを表示され番号、氏名、住所が選択されたデータが表示されるようにしたいのでが更新ボタンを押しても下記のように出ます string(64) "SELECT `番号`,`氏名`,`住所` FROM tbl_test where `番号`=0" bool(false) データが削除されています ソースコードはtop.php 一覧画面です <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); if(isset($_GET["del"]) and isset($_GET["id"]) and $_GET["del"]==1){ $id=(int) $_GET["id"]; $result = mysqli_query($con,"DELETE FROM tbl_test where `番号`={$id}"); } // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=get>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<td><a href=\"".$_SERVER["SCRIPT_NAME"]."?del=1&amp;id=".$row['番号']."\">削除</a></td>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 受け取る側 koushin_input.phpです <html> <body> <?php // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // SELECT文を実行 $id=(isset($_GET["id"]))?((int) $_GET["id"]):0; $sql = "SELECT `番号`,`氏名`,`住所` FROM tbl_test where `番号`={$id}"; var_dump($sql); if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データの存在チェック if(!$row=mysql_fetch_array($res)){ $row=mysql_fetch_array($res); var_dump($row); echo "データが削除されています"; exit; } // 入力画面の出力 echo "<form action=koushin.php method=post>"; echo "名前:<input type=text name=NAME value=\"" . $row['氏名'] . "\"> "; echo "住所:<input type=text name=ADDR value=" . $row['住所'] . "> "; echo "<input type=submit value=更新>"; echo "</form>"; // 結果セットの解放 mysql_free_result($res); // データベースから切断 mysql_close($con); ?> </body> </html> どこが原因なんでしょうか?

    • ベストアンサー
    • MySQL
  • Linuxでsvnコマンドでcommitしたい。

    現在Ubuntu Linuxを使用しています。svn管理のディレクトリ内で、a.outというフォルダを削除しました。 これをSVNサーバー側のリポジトリ側へも反映したいのでcommitしたいのですがどうやれば良いでしょうか? 現在カレントディレクトリは /root/20140411 このディレクトリです。 20140411のディレクトリがSVNで管理しているディレクトリです。 /root/20140411 カレントディレクトリ内で # svn update このようにアップデートを行ってみたら、アップデートできました。 しかし、 # svn commit これをやっても、コミットされませんでした。 現在のカレントディレクト内をコミットする方法をご教示頂きますよう、お願い致します。

  • PHPでの確認画面について

    入力フォーム(html)に必要事項を入力し PHPでデータを受け取り、Mysqlに保存後 PDF出力しております。 DBに書きこむ前に確認画面を出したいのですが 以下のプログラム1つで行なうことは可能でしょうか? それとも、プログラムを分ける必要がありますか? フォームに入力 ↓ 確認画面 ↓ OKならDBへ出力&PDF出力。 NGなら入力フォームに戻りたいです。 PHP初心者です。 どうぞ、宜しくお願いします。 ----- <?php //#環境設定 mb_language("Japanese"); mb_internal_encoding ("utf8"); $errflg = 0; $host = 'localhost'; $user = 'xxxxxx'; $password = 'xxxxxx'; $database = 'xxxxxx'; //DBへ接続開始 $link = mysqli_connect($host, $user, $password, $database); if (!$link) { print("接続できませんでした"); exit(); } /* 文字セットを SJIS に変更します */ mysqli_set_charset($link, "SJIS"); //オートコミットOFF mysqli_autocommit($link, FALSE); //重複チェック $account = $_POST["name"]; $sql = 'select * from xxxxx where name = "'.$name.'";'; $rs = mysqli_query($link, $sql); $rows = mysqli_num_rows($rs); if($rows == 0){ } else {   echo "【".$name."】は既に登録されています。<BR>"; $errflg = 1; } // ステートメントの設定 $sql = 'INSERT INTO schoolmate (id,name) VALUES(?,?)'; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_bind_param( $stmt,"ss", $id, $name ); // 入力チェック //名前(性) if($_POST['name'] == ""){ echo "【名前】が未入力です。<BR>"; $errflg = 1; } ~省略~ // 値設定 if($errflg == 0){ $id = $_POST["id"]; $name = $_POST["name"]; //SQL文を実行する mysqli_stmt_execute($stmt); //コミットする mysqli_commit($link); //ステートメントクローズ mysqli_stmt_close($stmt); //DBへの接続を切断 mysqli_close($link); require('/php/includes/fpdf/mbfpdf.php'); $pdf=new MBFPDF(); $pdf->AddMBFont(GOTHIC ,'SJIS'); $pdf->AddMBFont(PGOTHIC,'SJIS'); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont(GOTHIC,'',10); $pdf->Write(8,"(xxxxx)\n"); $pdf->Cell(0,30,'平成  年  月  日',0,1,R); $pdf->SetFont(GOTHIC,'',12); $pdf->Cell(0,20,'氏 名             印',0,1,R); $pdf->SetFont(GOTHIC,'',14); $pdf->Cell(63,10,'氏名(漢字)',1); $pdf->Cell(63,10,$id,1); $pdf->Cell(63,10,$name,1,1); ~省略~ $pdf->Output(); }else{ $errflg = "1"; } ?>

    • 締切済み
    • PHP
  • torotoise svnでコミットに失敗する

    tortoise svnで管理しているファイルの更新を実施したので、コミットしようとすると次のようなエラーが発生しました。 Committing transaction... Error Commit failed (details follow): Error No such revision 465 Completed! このようなエラーが発生してしまいコミットできません。 なお、svn updateもできません。 このようなエラーが出た原因として少し心当たりがあるのですが、 半年くらい前に、このリポジトリを管理しているファイルサーバが故障してしまい、リポジトリごと消えてしまうトラブルが発生しました。 復旧作業で、別のPCにtortoise svn serverをインストールして、約1年くらい前にバックアップしておいたリポジトリデータを再設置しました。それ以来コミットができなくなっているようです。 リポジトリのトップディレクトリでshow logを実施すると、最終Revisionは458と出てきます。 どうぞ、ご教示の程宜しくお願い致します。

  • MySQLのトランザクションについて

    WEBアプリ上の、MySQLのトランザクションについて質問です。 トランザクションは、データの挿入に矛盾がない場合commitすることによって データの挿入等を確定する機構だとおもいますが、 この仕組みって、トランザクション中は作業対象のテーブルは実行中のクライアント以外 アクセスできなくなる(※つまりロック?がかかっている?)のでしょうか? そうじゃないと、意味がないですよね?やっぱり。。。 また仮にですが、例えばAというクライアントがWEBサイトにアクセス中に Bというクライアントが待ったく 同じ動作を同じタイミングでアクセスした場合ってどうなるのでしょうか? 実際、WEBアプリでそこまでの例外というか処理って行うものでしょうか? また、ちなみにMySQLの場合、 "START TRANSACTION" というSQL文だけでなく AUTOCOMMIT = 0 として、自動コミットをオフにしつつ beginという式で トランザクションを開始する方法があるようですが、実際はどちらの方が当たり前のほうほうなのでしょうか? 識者の方ご教授ください。

    • ベストアンサー
    • MySQL
  • SELECT時の行ロックの必要性について

    SELECT ~ FOR UPDATEやSELECT ~ LOCK IN SHARE MODEという行ロックがあり、この件について解説しているサイトをいろいろ見ているのですが、振る舞いが複雑だということはわかりました。 しかしそもそもなぜSELECTで行ロックするのか、運用上でどんなときに使うのかを解説しているサイトは見当たりませんでした。 私は、SELECTするときは単に SELECT * FROM tb_a WHERE id = 1; としか記述していません。 質問1. なぜSELECTするのにトランザクションが必要なのでしょうか?運用上でどんなときにSELECTでトランザクションを使うのでしょうか?よく解説サイトには、 BEGIN; SELECT * FROM tb_a WHERE id = 1 FOR UPDATE; COMMIT; と書いています。SELECTするのに行をロックする必要性がいまいちわからないです。 質問2. トランザクションを開始したときにロックがかかるのではないのでしょうか?つまりBEGIN;でロックがかかるわけではないのですか?SELECTのクエリーにFOR UPDATEと書くということはこのSELECTのコードが実行された時点でロックがかかるのでしょうか? 質問3. FOR UPDATEやLOCK IN SHARE MODEというのはSELECTにしか使えないのか、もしくはSELECTだから意味があるのでしょうか?UPDATEやDELETEは単にBEGINE;とCOMMIT;で囲えばいいだけですよね? 質問4. 以下のようなコードを解説しているサイトがあります。 BEGIN; SELECT * FROM tb_a WHERE id = 1; COMMIT; SELECT文にはFOR UPDATEも書いていないのですが、これは何を意味するのでしょうか?つまり、SELECTするのになぜトランザクションを実行するのでしょうか? 一番知りたいのは運用上どのような場合にSELECTでトランザクションを使って行ロックするのか、ということです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • トランザクションモード

    早速ご教示ください。 データベース(TEST_db)のM_SYAIN_CDというテーブルがあるとします。 【クエリアナライザ】TEST_db BIGIN TRANSACTION GO DELETE M_SYAIN_CD GO 上記を実行します。 この状態で、M_SYAIN_CDの全行を返すと、『Microsoft odbc sqlserver driver 時間切れになりました』とエラーになり全行返すことができません。 (1)なぜMicrosoft odbc sqlserver driver 時間切れになりました。とな るのか? トランザクションモード中にテーブルは見れないのでしょうか? 【クエリアナライザ】TEST_db BIGIN TRANSACTION GO DELETE M_SYAIN_CD GO COMMIT TRANSACTION GO (2)上記実行後、ROLLBACKはできるのでしょうか? ご教示の程宜しくお願い致します。

  • JTAでこういうことがしたいんです。。。

    こんにちは。よろしくお願いします。 webworkとシーサーとhibernateを使ってるのですが、 テーブルデータの更新で悩んでいます。 やりたいことは・・・ 1.セッションを取得 2.トランザクション開始 <ここから該当データ分ループ> 3.該当データの検索 4.該当データの更新 <ここまでループ> 5.コミット(トランザクション終了) 要するに、該当データ分「全て」の更新がうまくいかない場合はrollbackし、うまくいけば一括でcommitしたいのです。 それで今、コネクションのautoCommitをfalseにしているのですが、上手くいきません。 確かに更新(session.update)時にすぐに更新されるわけではないのですが、次の該当データを検索する(session.find)ところでコミットされてしまいます。 どうしたら解決できるのでしょうか。。 お知恵を貸してください。 よろしくお願いします。

    • ベストアンサー
    • Java