MySQL は、update、delete、insert ステートメントが正常に実行されたことをどのように確認しますか?
タイトルにあるように、現在は mysql_affected_rows() によって判断しています。これは、ほぼすべての update、delete、insert ステートメントの後に
if(mysql_affected_rows()!=1) という文が続く必要があることを意味します
{
エラー報告
}
もっと簡単な方法は何ですか?
ディスカッションへの返信 (解決策)
mysql_affected_rows は、実行が成功したかどうかを確認するために使用されるのではなく、関連する SQL 命令が操作されたレコードの数を観察するために使用されます
if(执行sql语句){.....}else{......}
l_affected_rows 対象外実行が成功したかどうかの検査
は、関連する SQL 命令が実行されたレコードの数を観察するために使用されます
影響を受けた行の数を確認するには、mysql_affected_rows() を実行する必要があります。
影響を受ける行が何行(0 行も含む)であっても、エラーではありません
影響を受ける行が何行(0 行を含む)であっても、エラーではありません
もちろん、これは知っています。 。 。
タイトルにあるように、常に mysql_affected_rows() によって判断されます。これは、ほぼすべての update、delete、insert 文の後に
if(mysql_affected_rows()!=1)
{
エラー レポートが続く必要があることを意味します。
}
聞いてください 何か簡単な方法はありますか?
補足すると、update、delete、insert文が少なくとも1行に影響を与えていると判断したいのですが、多くの場合そのような判断ロジックが必要なようです
理由は、update、delete、insertが0行であっても影響があるからです。行を更新すると、トランザクションはロールバックされないため、この問題が発生します
更新に条件を満たすレコードがない場合、変更された値が元の値と同じである場合、変更されません。実際には変更は行われません。
削除 条件を満たすレコードが存在しない場合は削除されません。条件を満たすレコードが複数ある場合は、当然まとめて削除されます。
挿入は 100 件のレコードであっても 1 つのみに影響します。省略された挿入ステートメントを使用して挿入されます
これがトランザクションとどのような関係があるのかわかりません
update 条件を満たすレコードがない場合、変更された値が同じ場合は変更されません。元の値のままでは実際には変更されません
delete 条件を満たすレコードが無い場合は削除されません 条件を満たすレコードが複数ある場合は当然レコードも削除されます
insert のみに影響します。短縮された挿入ステートメントを使用して 100 個が挿入されたとしても 1 つ
これがトランザクションと何の関係があるのかわかりません
よく考えてみると、あなたの言ったことは理にかなっています。
私の質問の例を挙げてみましょう:
たとえば、ユーザーが仮想アイテムを購入するために仮想通貨を使用したい場合、更新後 ... setmoney= ... ここで user_id =... ステートメントが実行されると、 1 行が正常に更新されたことを確認するには、mysql_affected_rows() を使用する必要がありますか?実際にお金のフィールドが更新されていないのではないかと心配なので、ユーザーに仮想アイテムを追加する次の作業を実行します
以前に更新のために select Money from ... を実行した場合、確実であることが保証されますか?
update 条件を満たすレコードがない場合、変更されません。 変更された値が元の値と同じ場合、実際には変更されません。
削除 条件を満たすレコードがない場合。複数のレコードがある場合、条件を満たすレコードは自然にまとめて削除されます
短縮された挿入ステートメントを使用して 100 件のレコードが挿入された場合でも、挿入は 1 つのレコードにのみ影響します
これが何なのかわかりません取引に関係があります
よく考えてみると、あなたの言ったことは理にかなっています。
私の質問の例を挙げてみましょう:
たとえば、ユーザーが仮想アイテムを購入するために仮想通貨を使用したい場合、更新後 ... setmoney= ... ここで user_id =... ステートメントが実行されると、 1 行が正常に更新されたことを確認するには、mysql_affected_rows() を使用する必要がありますか?実際にお金のフィールドが更新されていないのではないかと心配なので、ユーザーに仮想アイテムを追加する次の作業を実行します
以前に更新のために select Money from ... を実行した場合、確実であることが保証されますか?
Direct if (更新操作....) {購入成功...}else {購入失敗....} は問題ありません。更新操作は失敗し、false を返します
$result = mysql_query("update ……")if ($result !== false){ echo "exec success";}else{ echo "exec error:".mysql_error():}
update 没有符合条件的记录,就不会修改,如果被修改的值和原值一样,则修改不会真正发生
delete 没有符合条件的记录,就不会删除,如果有多条符合条件的记录,自然也就一并删除了
insert 只会影响一条,哪怕是用缩略写法的 insert 语句插入了 100 条
看不出这与事务有什么关系
想了一下,你说的有道理。
我把我的疑问举个例子:
比如用户要用虚拟货币购买虚拟物品,在update ... set money= ... where user_id=... 这条语句执行后,需不需要mysql_affected_rows()来验证成功update了1行呢?我担心没真正update到money字段,然后就执行了下面给该用户添加虚拟物品的业务
如果在之前执行了select money from ... for update,就能保证万无一失吗?
直接if (update操作....){购买成功...}else{购买失败....}不就好了,update操作失败返回的是false
好的我决定试一下,看起来比mysql_affected_rows简洁,不知道效果上有没有什么细微差别
$result = mysql_query("update ……")if ($result !== false){ echo "exec success";}else{ echo "exec error:".mysql_error():}
同上,谢谢,准备试一下效果
如果你不放心 update ... set money=money-1 会真实执行的话
那么你是否需要再 select 一下,确认 money 减少了 1,而不是减少了 100 呢?
$result = mysql_query("update ……")
只有在 sql 指令是错误的情况下,才会返回 false
所以并不需要去试
如果你不放心 update ... set money=money-1 会真实执行的话
那么你是否需要再 select 一下,确认 money 减少了 1,而不是减少了 100 呢?
$result = mysql_query("update ……")
只有在 sql 指令是错误的情况下,才会返回 false
所以并不需要去试
如果你不放心 update ... set money=money-1 会真实执行的话
那么你是否需要再 select 一下,确认 money 减少了 1,而不是减少了 100 呢?
$result = mysql_query("update ……")
只有在 sql 指令是错误的情况下,才会返回 false
所以并不需要去试
好的,感觉你说的听起来比较靠谱,谢谢。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









キーボードの削除キーは、del (削除) キーとバックスペース キーの 2 つです。バックスペースはバックスペース キーとも呼ばれます。このキーはカーソルの前のテキスト コンテンツを削除でき、削除キーは文字、ファイル、選択したオブジェクトを削除できます。 Del キーを押すたびに、カーソルの右側の文字が削除され、カーソルの右側の文字が 1 フレーム左に移動します。1 つ以上のファイル/フォルダが選択されている場合は、Del キーを押します。キーを押すとすぐに削除できます。一部のアプリケーションでは、プログラム内のオブジェクトを選択し、Del キーを押すと、選択したオブジェクトをすぐに削除できます。

削除キーの機能は次のとおりです: 1. 文字の削除; 削除キーを押すたびに、カーソルの右側の文字が削除され、カーソルの右側の文字が 1 フレーム左に移動します。 2. ファイルを削除します。1 つ以上のファイル/フォルダーが選択されている場合は、Delete キーを押してそれらをすぐに削除します (回復のためにごみ箱に移動します)。 3. 選択したオブジェクトを削除します。一部のアプリケーションではオブジェクトを選択し、Delete キーを押すと、選択したオブジェクトがすぐに削除されます。

Control+Alt+Delete:「Mac」モード Ctrlaltdel は、Windows ユーザーがタスク マネージャーを開くために使用する一般的なキーの組み合わせです。通常、マネージャー メニューから不要なアプリケーションを終了して、コンピューター上のスペースを解放します。 Control+Alt+Delete Mac 版を使用すると、強制終了メニューを開くことができます。 Mac ユーザーが問題の原因となっているプログラムを終了したい場合、または開いているプログラムを表示したい場合は、メニューを操作してさらに調査することができます。 Mac で ControlAltDelete を実行するにはどうすればよいですか?正常に動作していないアプリケーションがある場合は、このキーの組み合わせを使用する必要があります。

delete で削除されたファイルは復元できます。ユーザーが delete を使用してファイルを削除すると、これらのファイルはごみ箱に移動され、完全には削除されないためです。回復方法: 1. 「ごみ箱」を開き、復元したいファイルを選択し、「この項目を復元」をクリックします; 2. 「ごみ箱」を開き、復元したいファイルを選択し、元に戻すショートカットを使用します。 「ctrl+z」。できます。

今日の Web 開発時代では、特にデータ量の多い Web アプリケーションを扱う場合、効果的かつ効率的なテーブル管理が非常に重要になっています。テーブルの行を動的に追加、編集、削除できる機能により、ユーザー エクスペリエンスが大幅に向上し、アプリケーションがよりインタラクティブになります。これを達成する効果的な方法は、jQuery の機能を活用することです。 jQuery は、開発者が操作を実行するのに役立つ多くの機能を提供します。テーブルの行 テーブルの行は、相互に関連するデータのコレクションであり、HTML の要素で表されます。これは、テーブル内のセル (要素で表される) をグループ化するために使用されます。各要素はテーブル内の行を定義するために使用され、複数属性テーブルの場合、通常は 1 つ以上の要素が含まれます。構文$(セレクター).append(co

PUT リクエストと Delete リクエストは Form フォームで使用され、get メソッドと post メソッドのみをサポートします。put メソッドを実装するには、次の 3 つの手順で実装できます: 1) SpringMVC で HiddenHttpMethodFilter を設定する 2) 上に投稿フォームを作成する3ページ目) 指定したリクエストメソッドを値として名前「_method」という入力項目を作成し、HiddenHttpMethodFilterクラスの「_method」の値を取得して新しいリクエストメソッドを取得します。番目のタグは thymeleaf テンプレートです。これは、従業員が

データベース削除の使用法: 1. 単一レコードの削除; 2. 複数のレコードの削除; 3. すべてのレコードの削除; 4. 特定の条件下でのレコードの削除。

削除キーの機能は次のとおりです: 1. テキストの削除、2. ファイルの削除、3. 選択したオブジェクトの削除。削除キーは通常、キーボードの右上隅にあり、削除キーを押すと、カーソルの右側の文字を削除できます。
