2013-02-15 2 views
0

У меня есть таблица с ниже значений:оператор обновления с помощью PHP MySQL не работает

Table 
----------------------------------------------------------- 
Column    | Type   | Default 
----------------------------------------------------------- 
name     varchar(100)  none 
loginCount    int(11)   0 
lastLoginDate   datetime   0000-00-00 00:00:00 
----------------------------------------------------------- 

Теперь я хочу, чтобы проверить, если пользователь вошел в систему правильно, и если да, обновить loginCount и lastLoginDate соответственно.

php сценарий, как показано ниже:

<?php 
    // Verification query.. 
    if($row = mysql_fetch_array($result, MYSQL_ASSOC)){ 
    $sql = "UPDATE table 
       SET `loginCount` = `loginCount` + 1, 
        `lastLoginDate` = now() 
      WHERE `name` = '".$username"'"; 
    $result = mysql_query($sql); 
    } 
?> 

Проблема в том, это не работает!

Однако, если я использую то же самое, войдя в консоль mysql, обновление происходит!

Не могли бы вы рассказать мне, что я делаю неправильно здесь?

Спасибо!

+0

проверьте файл mysql.log, если запрос запущен, и если он выполняет какие параметры отправляет. – coder101

+0

Является ли ваша таблица действительно «таблицей»? Если это так, это зарезервированное ключевое слово, и вам нужно процитировать его с обратными окнами, так же, как у вас есть ваши столбцы. –

+1

Кроме того, 'if (! $ Result) echo mysql_error();' –

ответ

2

Вы не нашли . для конкатенации до закрытия цитаты

WHERE `name` = '".$username"'"; 
//------------------------^^^ 

Должно быть

WHERE `name` = '".$username . "'"; 
//--------------------------^^^ 

Или лучше не использовать конкатенацию, потому что вы ограждающие в двойных кавычках.

$sql = "UPDATE `table` SET ..... WHERE `name` = '$username'"; 

Это значит, что у вас, вероятно, не включен error_reporting, или вы увидите синтаксическую ошибку.

Что-то вроде:

Parse error: syntax error, unexpected '"'"' (T_CONSTANT_ENCAPSED_STRING)...

ini_set('display_errors', 1); 
error_reporting(E_ALL); 

Наконец, она не должна вызывать проблем, я бы не стал ожидать на основе публикуемую кода, но это неразумно повторно $result, который является переменным результатом ресурса от вашего первого (невидимого здесь) запроса. После этого вам не удастся извлечь его из него позже, если потребуется, после того, как он был перезаписан TRUE/FALSE из инструкции UPDATE. Используйте другую переменную для успеха/неудачи UPDATE.

$other_var_not_result_for_clarity = mysql_query($sql); 
+0

Сделал это. Обновление не происходит! – curlyreggie

+0

@curlyreggie Вы отлаживали его, демонстрируя тестирование true/false на '$ result' и отображая ошибки, как это предлагается в комментариях? Если ни одна строка не обновляется, и нет ошибки ('$ result' is true), то' $ username' не содержит того, что вы ожидаете. –

+0

@curlyreggie И вы отлаживали первый запрос, из которого вы вытащили '$ row'? Вернул ли он строку, заставляющую выборку вводить блок 'if'? –

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