MYSQL réglage du fuseau horaire dans le code PHP
Comment puis-je changer MYSQL FUSEAU horaire de GMT format comme cette fonction en PHP:
/ENSEMBLE GMT FUSEAU HORAIRE/
date_default_timezone_set('Etc/GMT');
Ma classe DB est ici:
class DB {
private static $instance;
private $MySQLi;
private function __construct(array $dbOptions){
$this->MySQLi = @ new mysqli( $dbOptions['db_host'],
$dbOptions['db_user'],
$dbOptions['db_pass'],
$dbOptions['db_name'] );
if (mysqli_connect_errno()) {
throw new Exception('Database error.');
}
$this->MySQLi->set_charset("utf8");
}
public static function init(array $dbOptions){
if(self::$instance instanceof self){
return false;
}
self::$instance = new self($dbOptions);
}
public static function getMySQLiObject(){
return self::$instance->MySQLi;
}
public static function query($q){
return self::$instance->MySQLi->query($q);
}
public static function prepare($q){
return self::$instance->MySQLi->prepare($q);
}
public static function esc($str){
return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
}
}
Et mes requêtes de ce genre dans d'autres fichiers:
DB::query('UPDATE `calendar_data` SET `data` = "'.DB::esc(json_encode($array)).'", `upcoming_time` = "'.date('Y-m-d H:i:s', $upcoming).'", `time_now` = NOW() WHERE `id` = "1"');
Où dois-je insérer ma requête à la classe pour exécuter une seule fois?
Merci!
$this->MySQLi->set_charset("utf8");
$this->MySQLi->query("SET timezone = 'GMT'");
- Ne fonctionne pas. Si j'utilise MAINTENANT(), heure du serveur a été inséré (GMT-4). Où est-elle un problème???
- Je vous recommande fortement contre la suppression de vos erreurs à l'aide de la
@
caractère.
Vous devez vous connecter pour publier un commentaire.
Essayez ce qui suit:
Nommé à l'aide de fuseaux horaires ne fonctionnera que si les informations de fuseau horaire tables dans la base de données MySQL ont été créés et remplis.
timezone
dosent œuvres. Utilisation time_zone au lieuAprès vous écrire ceci:
Écrire ceci:
Ce fuseau horaire paramètre s'applique à toutes les futures requêtes envoyés sur cette connexion.
Également, vous assurer que vous avez configuré la zone des tables dans la base de données mysql.
http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html
SET timezone
de nouveau avant de vousSELECT
ed la date de retour pour vérifier ce qui a été inséré? Si vous vous connectez avec lemysql
de la CLI et de l'exécution d'une requête, il va utiliser la zone serveur de temps encore.users_calendar_data
ENSEMBLEdata
= "'.DB::esc(json_encode($array)).'",upcoming_time
= "'.date('Y-m-d H:i:s', $à venir).'",time_now
= MAINTENANT() OÙid
= "1"'); Mais mon time_now valeur est égale à l'heure du serveur (pas GMT).SELECT
ing quelque part, regardez ce que vousUPDATE
d. Êtes-vous de définir le fuseau horaire sur CETTE connexion? Aussi, avez-vous remplir le MySQL tzinfo base de données? Vous ne pouvez pas faire cela sans que. dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.htmlDe manuel;
Donc doit être comme ceci;
http://dev.mysql.com/doc/refman/5.5/en//time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en//server-system-variables.html#sysvar_time_zone
MySQL possède une vaste le fuseau horaire de soutien. Vous pouvez la définir, au niveau du serveur, sur une base par connexion et même par requête. Je pense que l'exécution 'SET time_zone = xxx", dans le __construct est assez pour vous.