Почему мой запрос MySQL INSERT вставляет 3 одинаковые строки? - PullRequest
0 голосов
/ 27 апреля 2009

Я пытаюсь отследить, что пользователи ищут на моем сайте (из простой формы поиска на главной странице) с помощью PHP и MySQL.

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

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

Ответы [ 4 ]

3 голосов
/ 27 апреля 2009

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

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 голос
/ 27 апреля 2009

В вашей таблице отсутствует первичный ключ. Я бы предложил идентификатор поиска, подобный PK, или что-то подобное

Подробнее об этом можно узнать на Уникальный ключ - Википедия

0 голосов
/ 12 мая 2009

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

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

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

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

0 голосов
/ 28 апреля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...