Neden benim MySQL INSERT sorgusu 3 aynı satır eklemek mi?

4 Cevap php

Kullanıcıların PHP ve MySQL ile (ön sayfasında basit bir arama formu) siteme ne arıyor izlemek çalışıyorum.

Tüm sorguları sonunda ben bu sorguyu kullanıyorum:

INSERT INTO `DiggerActivity_Searches` (
`SearchTerms`,
`SearchType`,
`NumResults`,
`Location`,
`Date`,
`Time`
) VALUES (
'SearchKeywords',
'SearchTypes',
'NumberOfResults',
'User'sLocation',
'CurDate',
'CurTime'
)

Yeni bir arama anahtar kelime olduğunda Şimdi, bu 3 aynı satır ekler. Ben sayfayı yenileyin Ancak, sadece olması gerektiği gibi, 1 satır ekler.

Değerler böyle bir GET (I URL şeyler yazılabilir mod var) olarak geçirilir:

http://www.mysite.com/Search-Category-Search_these_words

4 Cevap

You might want to check first whether your script executes the query three times or the script is invoked three times (e.g. by some browser addons).
If you do not have a debugger installed you can use something like

function trace_log() {
    static $magic = null;
    if (is_null($magic)) {
        $magic = uniqid();
    }

    $s = $magic . ' '. microtime(true) . ":\r\n";
    foreach( debug_backtrace() as $d) {
        $s .= '  '. $d['file'].'@'.$d['line']."\r\n";
    }

    file_put_contents('trace_log.txt', $s, FILE_APPEND);
}

...
trace_log();
mysql_query(....) // or stmt->execute() or whatever you use to execute the query.

Trace_log.txt değişiklikleri her bir günlük girdisi ("sihirli" id) ilk değeri varsa, komut birden çok kez çağrılır. Her üç aramalar () trace_log için aynı ise, script Sorgu üç kez yürütür.

Sizin tablo birincil anahtar eksik. Id arama kimliği ya da benzer bir şey gibi PK önermek

Unique key - Wikipedia Bu konu hakkında daha fazla okuyun

Sadece bu garip hata ile ilgili yalnız değilsiniz biliyorum.

Bu aynı sorun yanı sıra son birkaç gün içinde benim web geldi. Geçenlerde eklenen tek şey üçüncü bir afiş reklam oldu.

ÇÖZÜM: Ben banner reklam script (İpucu: arama motoru bir G ile başlar) dışarı yorumladı ve her şey yine iyiydi.

Ben sadece bir yorum koymak böylece daha fazla itibar gerekir yapmak için gidiyordu ...

Neyse, benzer oldu bana. Ben otomatik olarak yeniden tarayıcınızın neden başlığı yukarıda ayıklama bilgi yankılanıyordu çıkıyor. Kontrol etmek için en kolay yolu sadece kullanımı

<script type="text/javascript">alert("loading");</alert>

başlığında ve bunu görmek kaç kez bakın.