問題タブ [rows-affected]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
149 参照

php - PHP で行われた更新の数を見つける

やっていることはフォームを使ってPHPでMySQLデータのデータを編集することです。

名前と携帯電話番号として 2 つのテキスト フィールドがあります。編集をクリックすると、テキスト フィールドに同じデータが表示され、その下に [保存] ボタンがあります。変更を行うと、完了として応答が返されますが、編集をクリックしてテキスト フィールドを変更せずに [保存] をクリックすると、失敗として応答が返されます。

以下はSAVEボタンのコードです。

心配ですmysql_affected_rows()

mysql_affected_rows()上記では、UPDATEステートメントでデータが同じ場合は0を返し、UPDATEステートメントでデータが同じでない場合は1を返すと思いますmysql_affected_rows()

これは正しいですか?それが正しい場合、更新が行われたかどうかをどのように処理しますか?

0 投票する
6 に答える
5659 参照

php - Affected_rowsは削除時に常にfalseを返します

正確にaffected_rowsが何を返すかを確認しました。何かが削除された場合は>0を返し、何も削除されなかった場合は0を返すはずです。

しかし、商品を削除すると、商品IDを介して存在するため、削除されます。しかし、私のモデルでこれを実行しようとして、問題の製品が削除されたかどうかをテストしたい場合は、次のようにします。

そして、そのように私のコントローラーに値を返します:

戻り値は常にfalse、つまり0です。しかし、データベースをチェックして製品が削除されたかどうかを確認すると、製品は削除されます。誰かが私が間違っていることを指摘できますか?

0 投票する
1 に答える
3139 参照

mysql - 何も更新されなかったときに、影響を受ける1行を返すMySQLプロシージャ

mysqlデータベースに次のストアド プロシージャがあります。

ご覧のとおり、更新ステートメントはremainingUses、最初のステートメントの変数selectが「0」より大きい場合にのみ実行する必要があります。

ただし、プロシージャを呼び出すと、CALL UsePassword(197);が返されますAffected rows: 1

id = 197データベース内のパスワード行の値が「remaining_uses = 0」の場合、理解できません。

結果に表示される場合、理由はありAffected rows: 1ますか?

ステートメントが正常に実行された場合、影響を受ける1行が返されるということですか? 技術的には、この例では UPDATE ステートメントが実行されていないためです。

更新何も更新されないだけでなく、更新ステートメントを完全に削除しても、影響を受ける行が 1 つあることがわかります。

ありがとう

0 投票する
1 に答える
1485 参照

mysql - LEFT JOIN を使用した MYSQL UPDATE

質問;

以下の MySQL クエリでは、ConnectionID のリストを生成する内部クエリが 34 個の ConnectionID を返します。次に、更新として 2 つのクエリを一緒に実行すると、クエリ結果は 14 行のみが影響を受けたことを示しました。UPDATE 関数がどのように間違っているかについての私の理解は間違っていますか?

ノート;

Connections.PartnerID が Partners.PartnerID と等しい特定の接続について、Partners テーブルの DefaultUserType が接続テーブルの RoleID と等しくなるように、データベースを更新しようとしています。

クエリ;

0 投票する
1 に答える
910 参照

php - PHP mysqliの affected_rows メソッドにバグがあるようです

奇妙な結果が得られました。単純な更新クエリの後の mysqli オブジェクトの状態は次のとおりです。

ご覧のとおり、ected_rows = -1 ですが... 情報は「一致した行: 3 変更: 3 警告: 0」であり、クエリによってデータベースが更新されました。私は mysqli->affected_rows を使用して、-1 を返し、テストに失敗している成功を確認していますが、それは正しくありません。

何か案は?

0 投票する
4 に答える
4036 参照

php - アクティブなレコード - 常に 1 を返す影響を受ける行

アクティブなレコードを使用してパスワード変更コードを作成しようとしています。それは問題なく動作しますが、パスワードが正常に変更されたかどうか、または現在のパスワードが実際に間違っていたかどうかを知る必要があります。

影響を受けた行を使用して、影響を受けたレコードの数を確認しています。値は 1 または 0 である必要があります。パスワードが正常に変更された場合は 1、変更されていない場合は 0 (つまり、入力された現在のパスワードが間違っていた) です。ユーザー名が一意であるため、影響を受ける行が 1 を超えることはありません。したがって、私がアプローチしている方法で機能するはずです。ただし、影響を受ける行関数は常に 1 を返すため、機能していないようです。

コード コントローラーは次のとおりです。

モデル:

0 投票する
0 に答える
298 参照

mysql - バグ?「SELECT LEFT JOIN」はすべての行に一致しますが、「UPDATE LEFT JOIN」は一部を無視します。内部の例

1 つの UPDATE クエリで 2 つのテーブルを更新したいと考えています。そのために単純な LEFT JOIN を使用します。不思議なことに、一致するすべての行が変更されるわけではありません。これはテーブルの例です:

これはサンプルの SELECT クエリで、すべての行に一致します。

これは UPDATE クエリです。

更新後、テーブルは次のようになります。

テスト大陸:

テストエージェント:

更新後、test_agent 009 の大陸フィールドがまだ「NA」のままである理由を誰か説明できますか?

INT フィールドを使用する場合、これは発生しないようですが、CHAR(2) フィールドが必要なので、テーブル構造については議論しないでください。これはバグ、機能、またはその他のものであるとだけ言ってください。

私はUbuntu 12.04とMySQL 5.5.29-1〜dotdeb.0を使用しています。私は15年以上コーダーであり、通常はそのようなお粗末な質問はしませんが、説明することはできず、助けが必要です...

アップデート:

CHAR(2) の代わりに INT(2) フィールドを使用して 2 番目の例を作成しました。この場合、UPDATE はすべての行に一致します。

--

--

更新後の test_agents:

--

これが正常な動作だとは信じられません。両方の例の唯一の違いはフィールド タイプであるため、同じ行に影響するかどうか? クエリは 100% 正しいと確信しています。

誰か説明がありますか?

前もって感謝します。

0 投票する
0 に答える
1077 参照

mysql - MySQL の更新は、トランザクションで影響を受ける 0 行を返します

テーブルアカウントには、デーモンの 1 つでアカウントが更新のためにブロックされていることをデーモンが知るための特別なフィールド「executor」があります。

ステップバイステップ:

  1. 取引開始
  2. アカウントをブロック:

    /li>
  3. いくつかの操作。このステップ中に、別のデーモンが id=1234 の行を選択して、それを更新しようとする (または、「エグゼキュータ」ではなく別のフィールドを更新する) ことができます。

  4. アカウントのステータスは次のように返されます:

    /li>
  5. 専念

ステップ 4 で mysql が成功の実行ステータスを返す場合がありますが、0 行が影響を受けます。10000回のトランザクションで1回発生します。

私は何を間違っていますか?それともmysqlのバグですか?

アップデート:

観察の後、私は次のことを得る:

1) まずやること

2) トランザクション ブロック レコード

3) お取引の際は

4) このクエリの後

結果2727を与える

ポイント 3 と 4 を数回繰り返した後、result executor=NULL... または 0 を取得します。結果を int 型の変数に書き込むためです。いずれにせよエグゼキュータは値 2727 ではなくなりました

さらにトランザクションがロールバックされます...もう一度操作を繰り返すと、エグゼキューターの値をリセットしなくてもすべて問題ありません...