0

MySQLiを使用して行の1つをPHPで更新しようとしていますが、更新後1秒以内にPHPMyAdminを更新すると成功しますが、更新後2秒以上データを確認しただけでは更新されません。

例えば:

'UPDATE orders SET MachineID = '.$id.' WHERE OrderID = '.$OrderID.
                   'AND ProductID = '.$ProductID

さっとリフレッシュしないと動作しませんが...

'UPDATE orders SET MachineID = 2 WHERE OrderID = 4 AND ProductID = 12'

リフレッシュしてからどれだけ長くても動作します。(これらは、私が通常テストに使用するデータです。)

だから私はそれが私の変数になるだろうが、他のクエリでコードのこの部分の前にそれらをほぼ10回使用していて、それは完全に機能します。

  • 変数をtrim()しようとしましたが、役に立ちませんでした。
  • また、mysqli_real_escape_string()を使用しようとしましたが、成功しませんでした。
  • mysqli_error()は私に何も与えていません。
  • mysqli_affected_rows()は私に「1」を与えています。これはそれが想定されているものです。
  • そして奇妙な部分は、「SELECT MachineID FROMorders WHERE OrderID = 4 AND ProductID = 12」を実行すると、phpMyAdminがデータを更新しなくても、更新された回答が得られることです。

この後、他のコードはないので、更新を「元に戻す」ことができるものは何もありません。

通常の「テスト」出力は次のようになります。

編集:これはブラウザが出力するものです。

ID: "2" //$id
OrderID: "4" //$OrderID
ProductID: "12" //$ProductID
UPDATE orders SET MachineID = 2 WHERE OrderID = 4 AND ProductID = 12 //Query
boolean true //Result var_dump
1 //Number of rows affected
2 //Machine ID

注:引用符は変数の一部ではありません。

編集:これはPHPコードです

$query = 'UPDATE orders SET MachineID = '.$id.' WHERE OrderID = '.$OrderID.' AND ProductID = '.$ProductID;          
echo 'ID: "'.$id.'"<br/>
     OrderID: "'.$OrderID.'"<br/>
     ProductID: "'.$ProductID.'"<br/>'.$query.'<br/>';

$res = $db->query($query);
var_dump($res);

echo mysqli_affected_rows ($db).'<br/>';   
$result = $db->query('SELECT MachineID FROM orders WHERE OrderID = 4 AND ProductID = 12');      
$result = $result->fetch_array();
echo $result[0];

なぜそれがファイル内で機能し、クイックリフレッシュ後に機能するのかは本当にわかりませんが、データの取得に時間がかかる場合はわかりません。フェッチしないと一定時間後にリセットされるようなものです。

私はこれにほぼ2日間取り組んできましたが、なぜ機能しないのかわかりません。これは非常に単純なSQLクエリです。

編集: MySQLバイナリログを調べましたが、毎回1に更新しているようです。これが発生する可能性がある唯一の方法は、ファイルが2回実行される場合ですが、2回実行される場合、出力が1回だけ存在するのはなぜですか?

編集:わかりました。問題はGoogleChromeにあるようです。IEでテストしましたが、動作します。何らかの理由で、Chromeはファイルを2回実行します。

4

1 に答える 1

1

さて、問題を見つけて修正することができました。

問題: 問題は、存在しない場合でもアイコンを取得しようとするChromeの有名な「ファビコン」バグでした。そのため、ファイルは2回呼び出されます。

修正: このファイルはAjax呼び出しを介して呼び出されることを意図していたため、Chromeは「ファビコン」を検索しようとしないため、バグはトリガーされません。私は基本的に、ファイル自体をテストするだけでなく、実行されるはずの方法をテストすることでバグを修正しました。

于 2013-02-07T14:47:36.447 に答える