2012-02-22 9 views
17

単純なmysql更新クエリで影響を受ける行の数を取得しようとしています。しかし、PHPのmysql_affected_rows()は常に0に等しくなります。foo = 1の場合でも、(は正しくに戻ります。変更された行がないため)、またはfooが現在他の整数(この場合、関数は1を返すはずです)。mysql_affected_rows()は、実際に更新が行われた場合でもUPDATE文に対して0を返します。

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 
mysql_query($updateQuery); 
if (mysql_affected_rows() > 0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; // always prints not affected 
} 

UPDATEステートメント自体が動作します。 INTは私のデータベースで変更されます。私はまた、データベース接続が事前に閉じられていないか、または何かがファンキーでないことを再確認しました。 mysql_affected_rowsは必ずしも接続リンク識別子を渡す必要はありませんが、私もそれを試しました。機能上の

詳細:mysql_affected_rows

任意のアイデア?

+1

あなたはレコードが更新されてよろしいですか?テストを実行する前にfooを1以外の値に設定してください。 – northpole

+3

万が一、書き換えルールのようにページが2回呼び出される可能性がありますか?これにより、データが最初に更新され、最終出力が表示されたときに2回目に更新されることはありません。Webサーバーのログを確認することは害ではありません。 –

+0

実際に0を返していて、負の値ではないことを確認しましたか? – Jodaka

答えて

-1

私の見た!

私は、関数が何度も呼び出されているかどうかを確認しようとしていました!

ほんの少しのアドバイス:

は(ISSETを使用してみてください)& POST/GETまたはそのような何か。

if (isset($_POST['Update'] == 'yes')) : 

// your code goes here ... 

endif; 

は、それは、チャオ明確かつ有用であったホープ:)

+1

isset()を使用することはできません。表現の結果について – Cedric

0

次のように接続してみてください:

$connection = mysql_connect(...,...,...); 

、その後、私はあなたがする必要があると思う。この

if(mysql_affected_rows($connection) > 0) 
    echo "affected"; 
} else { ... 
0

のように呼び出します更新で何か他のものを試し、次にfoo = 1を試してください。あなたが見ている限り、それは更新されているかどうか、またはループなしではないことが分かります。そうであれば、ifループが機能します。

0

あなたはこれを動作させますか?

$timestamp=mktime(); 
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2"; 
mysql_query($updateQuery); 

$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}"; 
$res=mysql_query($updateQuery); 
$row=mysql_fetch_row($res); 
if ($row[0]>0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; 
} 
19
のMySQLの

新しいバージョンでは修正が行われていないかどうかを確認してくれます。あなたはUPDATEステートメントを解雇言うことができます:

UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234 

は、列の値が既に1であれば言うことができます。更新プロセスは発生しません。mysql_affected_rows()は0を返します。そうでなければ、Column Lazyが1ではなく他の値を持っていたら、1が返されます。人為的ミスを除いて他の可能性はありません。

+5

+1。そのことを知りませんでした – asprin

+1

それは私の人生を困難にしていたので、それでした。今私はこれを回避するために私のコードを更新することができます。 – zeeshan

1

mysqli_affected_rowsでは、mysqliクエリへの参照ではなく、データベース接続への参照を唯一のパラメータとして渡す必要があります。例えば。

$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname"); 

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 

echo mysqli_affected_rows($dbref); 

は、NOT

echo mysqli_affected_rows($updateQuery); 
0

次の注意事項は、あなたのために参考になる、

にmysql_affected_rows()は

  • 0を返します。行が更新または挿入されませんでした(行がすでに存在している可能性が高いため、 )フィールド値は実際には変更されませんでした更新)。

  • +1:行が

  • +2を挿入した行が

  • -1を更新したエラーの場合。

mysqli affected rows developer notes

関連する問題