I am using query for joomla.
$query = \"INSERT INTO \'#__demo\'( \'id\', \'fname\', \'mname\', \'lname\' ) VALUES ( \'$val\', \'$post[\'fname\']\', \'$post[\
You can use a more formatted way of writing insert query
$db = JFactory::getDBO(); // get the connection
$query = $db->getQuery(true);
$columns = array('field1','field2'); // set the column names to a variable
$values = array(1,$db->quote('Your message'));
$query->insert($db->quoteName('#__tablename'))
->columns($db->quoteName($columns))
->values(implode(',',$values));
$db->setQuery($query);
$db->execute();
$tourid = $db->insertid(); // get the last inserted id
You can get the reference from here
https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase
There are two mistakes on your query.
You haven't escaped your quotes in $_POST
values.
'$post['fname']'
// ^ here and other places
You are using single quotes '
to represent tables and field names.
.. INTO '#__demo'( ..
// ^ here and other places
Now after removing all such problems. You query becomes:
$query = "INSERT INTO `#__demo` ( `id`, `fname`, `mname`, `lname` ) VALUES ( '$val', '$post[fname]', '$post[Mname]', '$post[Lname]' );";
For inserting the data you can use this format also in joomla 2.5 :
$data =new stdClass();
$data->id = null;
$data->field1 = 'val1';
$data->field2 = 'val2';
$data->field3 = 'val3';
$db = JFactory::getDBO();
$db->insertObject( '#__mytable', $data, id );
stdClass is a php base class from which all other classes are extended.
'id' is the name for your primary key for the connected table.