2009-04-26 7 views
0

Я пытаюсь отслеживать, что пользователи ищут на моем сайте (из простой формы поиска на первой странице) с PHP и MySQL.Почему мой запрос MySQL INSERT вставляет 3 одинаковых строки?

В конце всех моих запросов я использую этот запрос:

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

Теперь, когда есть новый поиск по ключевым словам, он вставляет 3 одинаковые строки. Однако, если я обновляю страницу, она только вставляет 1 строку, как и следовало бы.

значения передаются как GET, как это (я мод переписать URL материал):

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

+0

И как выглядит ваш сценарий? – Gumbo

+0

Вы также можете вставить определение таблицы. Может быть проблемой с вашими ключами или отсутствием первичного ключа. –

+0

Вне темы: Почему у вас есть один столбец даты и один столбец времени? Разве не лучше использовать тип DateTime и один столбец? – Svish

ответ

3

Вы можете сначала проверить, выполняет ли ваш скрипт в запросе три раза или сценарий вызывается в три раза (например, с помощью какого-то браузера аддоны).
Если у вас нет отладчика установки вы можете использовать что-то вроде

 
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, ваш сценарий вызывается несколько раз. Если это одинаково для всех трех вызовов trace_log(), ваш скрипт выполняет запрос три раза.

1

Ваш стол не хватает первичного ключа. Id предложить ПК как поиск ID или что-то подобное

Подробнее об этом в Unique key - Wikipedia

0

Просто знайте, что вы не одиноки в борьбе с этой странной ошибкой.

Эта же проблема возникла и на моем сайте за последние несколько дней. Единственное, что я недавно добавил, это стороннее баннерное объявление.

РЕШЕНИЕ: Я прокомментировал сценарий рекламного баннера (подсказка: от поисковой системы, которая начинается с буквы G), и все снова было хорошо.

0

Я просто хочу, чтобы сделать комментарий положить нужно больше репутации так ...

Во всяком случае, подобное случилось со мной. Оказывается, я повторял отладочную информацию над заголовком, заставляя браузер перезагружаться автоматически. Самый простой способ проверить - просто использовать

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

в заголовке и посмотреть, сколько раз вы его видите.

Смежные вопросы