xml unix timestamp to mysql timestamp and record mysql - mysql

My XML:
<simpletype type="TURKEY">
<city code="01">
<telcode>(0 322)</telcode>
<name>Adana</name>
<time>1345337940</time>
</city>
<city code="02">
<telcode>(0 416)</telcode>
<name>Adıyaman</name>
<time>1340236800</time>
</city>
</simpletype>
MY Mysql import Code:
require_once('db.php');
#mysql_connect(_SERVER,_USER,_PASSWORD);
#mysql_select_db(_DATABASE);
$doc = new DOMDocument();
$doc->load( 'CityCode.xml' );
$cities = $doc->getElementsByTagName( "city" );
foreach( $cities as $city )
{
$names = $city->getElementsByTagName( "name" );
$codes = $city->getElementsByTagName( "telcode" );
$times = $city->getElementsByTagName ( "time");
$name = $names->item(0)->nodeValue;
$code = $codes->item(0)->nodeValue;
$time = $times->item(0)->nodeValue;
mysql_query("SET CHARACTER SET utf8");
$sql = "INSERT INTO telcode (sehir, name, time) VALUES ('$name' ,'$code' ,'UNIX_TIMESTAMP ($time') ";
#mysql_query($sql);
}
My Question:
My xml source have a unix timestamp and i must use is mysql timeststamp (0000-00-00 00:00:00)
How can i convert $time unix timestamp to mysql timestamp and record mysql db ?

In MySQL you can convert a UNIX-style timestamp (seconds since 1970 UTC) to a MySQL timestamp with the FROM_UNIXTIME function.
See here. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_from-unixtime

In php, you can read a timestamp out into whatever format you like.
date($format, $timestamp);
http://php.net/manual/en/function.date.php

Related

Array in MySQL error

I don't know how to make one of my columns (ListOfAvailableSeats) an array.I've tried but nothing works.Can you give me a hint, please? This is the latest version of the code:
ALTER TABLE `newconnectionmviescinema`.`allmovies`
CHANGE COLUMN `LastUpdate` `LastUpdate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `Duration`,
CHANGE COLUMN `` `ListOfAvailableSeats` INT(60) NOT NULL ;
INSERT INTO `allmovies`.`ListOfAvailableSeats` VALUES ('1,2,3,4,5,6,7,8,9,10,11,12,13,14,15');
Since MySql doesn't have an array type for storage, why not encode the array as JSON, and store the resulting string? Then decode it when you need to use the array from the table.
If I was doing this in php, I'd use something along the lines of:
<?php
$values = array();
array_push($values, 1);
array_push($values, 2);
array_push($values, 3);
array_push($values, "chicken");
$toStore = json_encode($values);
//Store $toStore as you would any other large string.
//When you need it use it like this:
$freeSeats = "";
$data = json_decode($jsonFromDatabase); //If you had an associative array like $data['name'], then you would add json_decode($jsonFromDatabase, true);
foreach($data as $seat){
$freeSeats .= $seat . ", ";
}
echo "The free seats are " . $freeSeats;
?>

convert a data varchar to date month

I have a table with a date column in it, but its data type using a varchar.
Month
| 01 02 03
I want to convert that data into a form of month name,I have tried this way, the data is successfully converted into months but always month of january.
foreach($list as $post) {
$time = strtotime($post->album_periode_bulan);
$newformat = date('F',$time);
$no++;
$row = array();
$row[] = $no;
$row[] = $time;
$data[] = $row;
}
I have implemented this in datatables
In MySQL you do
UPDATE your_table
SET your_column = DATE_FORMAT(STR_TO_DATE(your_column, '%m'), '%M');
and that's it. Read more about the format parameters for both functions here.
Note though, newer releases set the sql mode NO_ZERO_IN_DATE by default. You might need to disable this temporarily with
set session sql_mode = "";
Check this before!!! with
show session variables like 'sql_mode';
or you might end with all your rows being NULL.

Can't set parameter for raw SQL in Doctrince

I am using raw SQL in doctrine.
my SQL:
//input datetime type for $dateStart,$dateEnd
$start = date_format( $dateStart,'Y-m-d');
$end = date_format( $dateEnd,'Y-m-d');
$sql = '
SELECT
*
FROM
log
WHERE
time >= "? 00:00:00"
AND
time <= "? 23:59:59"
';
$pdo = $this->em->getConnection();
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1,$start);
$stmt->bindValue(2,$end);
$stmt->execute();
$rs = $stmt->fetchAll();
I tried bindValue, bindParam but no hope. I've also tried $param as array to pass to execute and it did not work.
$param = array($start,$end);
Could anyone help me?.
You cannot bind a part of a string literal, but a complete literal only
Besides, it makes no sense to split your date creation between PHP and SQL
$start = date_format( $dateStart,'Y-m-d 00:00:00');
$end = date_format( $dateEnd,'Y-m-d 23:59:59');
$pdo = $this->em->getConnection();
$stmt = $pdo->prepare('SELECT * FROM log WHERE time BETWEEN ? AND ?');
$stmt->execute([$start, $end]);
$rs = $stmt->fetchAll();

PHP Mysql PDO retrieve records by date range

I'm retrieving a list of items from my database using the PDO approach and when I do:
$select['from'] = date('Y-m-d 00:00:00',strtotime("2016-02-01"));
$sql = "SELECT * FROM listings WHERE date_added >= :date AND date_added < DATE_ADD(:date, INTERVAL 30 DAY)";
$statement = $pdo->prepare($sql);
$statement->bindParam(":date", $select['from'], PDO::PARAM_STR);
$statement->execute();
var_dump of my result gives:
object(stdClass)#5 (2) { ["data"]=> array(0) { } ["rows"]=> int(0) }
Running the same query directly through PhpMyAdmin gives the desired result. date_added is data type DATETIME
This can be a problem of your date format.
You have to use the format 'Y-m-d H:i:s' in PHP.
$date = date('Y-m-d H:i:s', strtotime($yourdate));

Make Zend\Db (zf2) between clause inclusive

I'm currently using Zend Framework 2 and a query with date ranges to obtain data out of a MySQL DB, and I came across the between clause that was previously not available in ZF1.
However, my code which looks something like this is not working correctly:
$dateStart = '2012-12-20';
$dateEnd = '2012-12-31';
$sql = new Sql($_db);
$select = $sql->select()
->from(array("t" => $table))
->columns(array("col1" => "col_as_1", "col2" => "col_as_2"));
$select->where->between("date", $dateStart, $dateEnd);
$stmt = $sql->prepareStatementForSqlObject($select);
$result = $stmt->execute()->getResource()->fetchAll(\PDO::FETCH_ASSOC);
Apparently the between clause is not inclusive, I can only get results until 2012-12-30, is there a way to make it inclusive? I've been taking a look at the ZF2 docs but they are not very helpful and running the same query on MySQL query browser returns all of the data I need.
So you can try lessThanOrEqualTo and greaterThanOrEqualTo.
Between doesn't seem to provide this functionality: between($identifier, $minValue, $maxValue)
If you trace out your query with $select->__toString() you can see the query as string.
I don't have ZF2 on my computer but I could imagine that between in ZF2 will output date > '2012-12-20' AND date < '2012-12-31'.
NOTE THIS : WHEN USING between on Mysql
date_column_name between 'startDate' AND 'endDate'
NOTE : you should want to insert +1 date to endDate . Because of when you insert 2015-05-18 date to endDate.you can not get data of 2015-05-18.So you need to plus one date to endDate.
You can do it using this
$plusToDate = date('Y-m-d H:i:s', strtotime($toDate . ' + 1 day'));
The BETWEEN should be inclusive, are you sure there are no hours, minutes and seconds after the date, that would cause it not to select dates on 2012-12-31 since 2012-12-31 00:00:01 would technically be > 2012-12-31
Format must be same, use mysql DATE function
$select->where->between("DATE(date)", DATE('.$dateStart.'), DATE('.$dateEnd.'));
$from_date = date('Y-m-d', strtotime($AppCleaner->from_date ));
$to_date = date('Y-m-d', strtotime($AppCleaner->to_date ));
$select->where->between('appointment_date', $from_date . ' 00:00:00', $to_date . ' 23:59:59');
also, Use the between clause as below:
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('app_posts');
$select->where->NEST->between( 'id', 30,40);
$select->group('app_posts.id');
// echo $select->getSqlString($this->adapter->getPlatform());
// exit;
$statement = $sql->prepareStatementForSqlObject($select);
$result = $statement->execute();
$resultSet = new ResultSet();
$resultSet->initialize($result);
$posts = $resultSet->buffer()->toArray();
return $resultSet;
Try this:
//I have a static function to make conversion Data Format
public static function convertBrazilianDate2MySQLDatabase($dataBrazil) {
$array = explode("/", $dataBrazil);
$array = array_reverse($array);
$str = implode($array, "/");
return date("Y-m-d", strtotime($str));
}
//In My Service I built my sentence
$dtStart = \Estrutura\Helpers\Data::convertBrazilianDate2MySQLDatabase($dt_start) . ' 00:00:01';
$dtEnd = \Estrutura\Helpers\Data::convertBrazilianDate2MySQLDatabase($dt_end) . ' 23:59:59';
$select->where->between('field name in table', $dtStart, $dtEnd);
[...]