ホームページ  >  記事  >  バックエンド開発  >  thinkphp がデータを更新するときにデータが変更されていない場合、返される結果は異常になります。

thinkphp がデータを更新するときにデータが変更されていない場合、返される結果は異常になります。

WBOY
WBOYオリジナル
2016-06-13 12:16:08880ブラウズ

thinkphp がデータを更新するときにデータが変更されていない場合、返された結果が誤って判断されます
thinkphp の CURD では、save メソッドを使用するときに、つまりデータが変更されていない場合に奇妙な問題が発生します。更新された場合(元のデータと同じ)、戻り値は false と判断されます。 実はこの問題はずっと前に発見し、公式コードの問題だと思っていましたが、この問題を解決しようと考える前に最近まで先延ばしにしていました。 「明日は明日が来る、明日はたくさんある。明日を待っているのはすべて無駄だ。励まそう!」と言わざるを得ません。

公式 Web サイトでこの問題を検索したところ、公式がこの問題を解決していることがわかりました。 原判決:

$result = $Model->where('id=1')->save($data);if($result) {    echo 'success';}else{    echo 'false';}



解決策: "===" を使用して戻り値を決定します

$result = $Model->where('id=1')->save($data);if($result !== false) {    echo 'success';}else{    echo 'false';}



問題は解決しましたが、まだ原因が分からなかったので、saveメソッド実装(バージョン3.2.2.1)のソースコードを見てみました。 3 mysql ドライバー):




Tp のモデルの最下層は pdo クラスのカプセル化で構成されているため、pdo で rowCount メソッドを探し続けます:




データが変更されていないため、データ内の影響を受ける項目の数は 0 となり、戻り値は 0 になります。 PHP の判定では 0 が false となるため、上記の条件が表示されます。 「===」で判定すると、変数の型で判定するので0とfalseは等しくないので問題は解決します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。