46

In my MySQL database, I have a table with structure

username - varchar
insert_time - timestamp

This table was created in MySQL using the phpMyAdmin tool and for the insert_time column, I have mentioned default value as 0000-00-00 00:00:00.

Now the problem is, I have to update this default value with the current timestamp later on, using a PHP script.

I tried doing the following PHP code:

$update_query = 'UPDATE db.tablename SET insert_time=now() '.
                'WHERE username='.$somename;

When the PHP script is run, it fails, and is unable to insert anything into the database.

What am I doing wrong?

Martin Thoma
  • 124,992
  • 159
  • 614
  • 958
arun nair
  • 3,643
  • 14
  • 41
  • 49

6 Answers6

56

What error message are you getting?

I'd guess your actual error is because your php variable isn't wrapped in quotes. Try this

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'"; 
Ash Burlaczenko
  • 24,778
  • 15
  • 68
  • 99
17

This format is used to get current timestamp and stored in mysql

$date = date("Y-m-d H:i:s"); 

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 
Kalaivani M
  • 1,250
  • 15
  • 29
15

Your usage of now() is correct. However, you need to use one type of quotes around the entire query and another around the values.

You can modify your query to use double quotes at the beginning and end, and single quotes around $somename:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'";
George Cummins
  • 28,485
  • 8
  • 71
  • 90
  • 3
    This is the solution, but you should ALWAYS escape variables before putting them into your database queries. Check out PDO http://php.net/pdo as a database abstraction layer which can help with this, or at least run mysql_real_escape_string($somename) before inserting it. – mjec May 20 '11 at 18:10
  • @mjec: You are correct, but I left it out to avoid clutter. The OP may be escaping the input before the line in question, or this may not be user input at all. – George Cummins May 20 '11 at 18:12
  • better: UNIX_TIMESTAMP() – Nitin Bansal Aug 30 '14 at 22:58
10

Forgot to put the variable in the sql statement without quotations.

 $update_query = 
      "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'";
Laurence Burke
  • 2,348
  • 14
  • 26
1

Don't like any of those solutions.

this is how i do it:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" 
            . sqlEsc($somename) . "' ;";

then i use my own sqlEsc function:

function sqlEsc($val) 
{
    global $mysqli;
    return mysqli_real_escape_string($mysqli, $val);
}
redux
  • 1,157
  • 10
  • 21
1

Instead of NOW() you can use UNIX_TIMESTAMP() also:

$update_query = "UPDATE db.tablename 
                 SET insert_time=UNIX_TIMESTAMP()
                 WHERE username='$somename'";

Difference between UNIX_TIMESTAMP and NOW() in MySQL

simhumileco
  • 31,877
  • 16
  • 137
  • 115