目次
ディスカッションへの返信(解決策)
ホームページ バックエンド開発 PHPチュートリアル PDO->exec() がデータを変更するときにデータが変更されていない場合、変更は失敗します。

PDO->exec() がデータを変更するときにデータが変更されていない場合、変更は失敗します。

Jun 23, 2016 pm 01:15 PM

PDO->exec() がデータを変更する場合、データが変更されていない場合、変更は失敗します。戻り値は 0 で、変更された 0 を使用してデータが正常に変更されたかどうかを判断します。ただし、トランザクションを使用して複数のテーブルを同時に処理すると、一部のテーブルでデータが変更され、別のテーブルでデータが変更されるという問題が発生します。テーブルは変更されません。いずれかのテーブルのデータが変更されていない場合、トランザクション全体が失敗し、例外ステートメントが実行され、ロールバック変更が失敗します。この問題を解決する方法はありますか?

	try {		$DB->BeginTransaction();	//事务开始		$updateNews=$DB->Update(DBI('Prefix').'news',$arrNews,'ID',$ID);		if($updateNews!==FALSE){			echo '<br />新闻标题表修改成功。';		}else{			throw new PDOException('异常:新闻标题表修改失败。');		//抛出异常		}		$updateConnent=$DB->Update(DBI('Prefix').'newsconnent',$arrConnent,'NewsID',$ID);		if($updateConnent!==FALSE){			echo '<br />新闻内容表修改成功。';		}else{			throw new PDOException('异常:新闻内容表修改失败。');		//抛出异常		}		$DB->Commit();		//成功,提交。	} catch (PDOException $e) {		echo '编辑失败:'.$e->getMessage();		$DB->Rollback();		//失败,回滚	}
ログイン後にコピー


ディスカッションへの返信(解決策)

update 実行時に PDO::exec() が 0 を返す理由は次のとおりです。
1 は指定されていません。状態記録
2. 変更されたフィールドの内容が、変更される内容と同じです。 PDO::exec() が false を返す理由は、SQL コマンドが間違っているためです。 Update が記述されていると判断される理由 $ updateNews!==FALSE

与えたコードはタイトルとコンテンツを同時に変更しますが、実際にはこの状況はめったに起こりません


PDO::exec() が実行される理由更新を実行すると 0 が返されます:

1、指定された条件のレコードがありません

2。 変更されたフィールドの内容が変更される内容と同じです

PDO::exec() は false を返します。理由: SQL コマンドは間違っています

$DB-> Update がどのように書かれているのか、そしてなぜ $updateNews!==FALSE と判断されるのですか

あなたが指定したコードはタイトルとコンテンツを同時に変更しますが、実際、この状況はめったに発生しません


PDO::exec() 更新の実行時に 0 を返す理由は次のとおりです:
1. 指定された条件を持つレコードがありません
2 変更されたフィールドの内容が同じです。修正内容

PDO::exec() が false を返す理由は、SQL コマンドが間違っています

$DB->Update がどのように書かれているのか、なぜ $updateNews!= と判断されるのかわかりません=FALSE

あなたが指定したコードはタイトルとコンテンツを同時に変更しますが、実際にはこの状況はめったに発生しません


コンテンツとタイトルは別のテーブルにあります 過去に mysqli を使用したときはそのような問題はなかったようです。 。今回はトランザクションを使用して 2 つのテーブルを保存および変更したいと思います。

カプセル化された $DB->Update() メソッドでは、exec() が 0 を返す場合、$DB->Update() は FALSE を返し、それ以外の場合は影響を受ける項目の数を返します。単一のテーブルを扱う場合、データ テーブルを変更する必要があるため、これは問題ないようですが、トランザクションとして使用すると、テーブルの 1 つが変更されていない場合、つまり 0 が返された場合、カプセル化したメソッドは変更失敗とみなされ、例外がスローされ、ロールバックが発生します。この場合、トランザクションを使用すべきではないでしょうか?しかし、この問題を解決しないと、今後も問題が続くような気がします。変更対象のデータが元のデータと同じである場合もあります。
現在の解決策は、コンテンツ テーブルとタイトル テーブルの両方に時間フィールドを追加するという愚かな方法を使用することであり、LastTime は保存されるたびに更新されます。これでストレージ障害の問題は解決しましたが、プログラムにもっと良い方法があるかどうかはわかりません。

変更時刻を追加することは正しく、ビジネス プロセスに沿っています
ただし、タイトルまたはコンテンツのみを変更することも一般的です 実際には、タイトルとコンテンツの間に強いつながりはありません (実際にはつながりは確立されています) IDを使用)

したがって、変更は必要ありません 挿入と削除にはトランザクションが必要です



変更時間を追加することは正しく、ビジネスプロセスに準拠しています

ただし、タイトルのみまたはコンテンツのみを変更することも一般的です

実際、タイトルとコンテンツの間に強いつながりはありません (実際には、ID を使用して接続が確立されます)

したがって、変更にはトランザクションの使用は必要なく、挿入と削除のみにトランザクションの使用が必要です


ありがとう、ありがとうとても。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles