2011-11-25 9 views
10

एमएसएसएलएल 2005 डेटाबेस के लिए पीडीओ डेटाटाइम प्रारूप "जर्मन_Phonebook_BIN" (लेकिन यह महत्वपूर्ण नहीं है) है। डीबी से कनेक्शन पीडीओ और फ्रीटीडीएस (डेबियन निचोड़ के तहत PHP का उपयोग करके) के माध्यम से किया जाता है। जब मैं एक मेज से दिनांक मान का चयन करने की कोशिश मैं की तरह परिणाम:एमएसएसएलएल/डीबीआईबी

अप्रैल 1 2008 12: 00: 00: 000

लेकिन मैं

2008-01-01 00:00 प्राप्त करने की उम्मीद : 00

(माना जाता है कि समय 00:00:00 12:00:00 में बदल दिया गया है, पता नहीं क्यों 00: 00 = 12: 00 ???) मेरे लिए कोई रास्ता नहीं है SELECT कथन (CONVERT के साथ रूपांतरण करने के लिए) में हेरफेर करें। मुझे डेट प्रारूप सेट करने के लिए पीडीओ में कोई विकल्प नहीं मिला। क्वेरी रन से पहले SET DATEFORMAT और SET LANGUAGE इससे प्रभावित नहीं होता है। कोई भी ऐसे संकेत दे सकता है जहां पीडीओ में यह किया जा सकता है (और केवल किया जा सकता है)? (। Btw नाशपाती :: MBD2 datetime कॉलम की उम्मीद प्रारूप में दिखाए, लेकिन MDB2 भयानक है जब यह UTF-8 और MSSQL के साथ काम करना पड़ता है), कुछ और जानकारी (केवल महत्वपूर्ण के टुकड़े से पता चलता)

ठीक:

<?php 
$this->_dsn = 'dblib:host=' . $this->_db['host'] . ';dbname=' . $this->_db['database'] . ';charset=UTF-8'; 
$this->_handle = new PDO($this->_dsn, $this->_db['user'], $this->_db['password']); 
print_r($this->_handle->query("SELECT [date_column] FROM [some_table]")); 
+0

यह व्यवहार सामान्य नहीं है। क्या आप दिखा सकते हैं कि आप उन मानों का चयन कैसे करते हैं और आप उन्हें PHP में कैसे आउटपुट करते हैं? –

+1

https://bugs.php.net/bug.php?id=54648 – rabudde

+0

ugh पर एक नज़र डालें, मैं देखता हूं। --- –

उत्तर

3

मैं सबसे अच्छा तरीका है एसक्यूएल SRV साथ PHP_PDO_DBLIB उपयोग करने के लिए लगता है convert in your SQL statement उपयोग करने के लिए हो सकता है ... datetime2 (6) में एमएस एसक्यूएल सर्वर डीबी के रूप में दिनांक स्टोर करने के लिए है। ऐसा लगता है कि सिम्फनी फ्रेमवर्क का उपयोग करते समय भी कई समस्याएं हल होती हैं।

0

मुझे यह समस्या भी थी, और पाया कि कुछ कारणों से जब मैं freetds fconfds.conf से सेटिंग्स को लागू करता हूं (केवल मेरे कनेक्टर स्ट्रिंग में पूर्ण होस्टनाम का उपयोग करने के बजाय), तिथियां सही ढंग से दिखाई देती हैं।

उदाहरण के लिए, अगर मैं प्रयोग किया है: के रूप में उम्मीद

$link = new PDO("dblib:host=myhost.myfulldomain.com;dbname=MYDB", $user, $pass); 

... तो यह काम नहीं किया - दिनांकों निराला थे। लेकिन अगर मैंने इसका इस्तेमाल किया:

$link = new PDO("dblib:host=myhost;dbname=MYDB", $user, $pass); 

... तो यह काम कर रहा था क्योंकि इसे मेरी freetds.conf फ़ाइल में "myhost" मिला।

मेरे freetds.conf फ़ाइल:

# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ 
# 
# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory. 
# 
# For information about the layout of this file and its settings, 
# see the freetds.conf manpage "man freetds.conf". 

# Global settings are overridden by those in a database 
# server specific section 
[global] 
     # TDS protocol version 
; tds version = 4.2 

    # Whether to write a TDSDUMP file for diagnostic purposes 
    # (setting this to /tmp is insecure on a multi-user system) 
; dump file = /tmp/freetds.log 
; debug flags = 0xffff 

    # Command and connection timeouts 
; timeout = 10 
; connect timeout = 10 

    # If you get out-of-memory errors, it may mean that your client 
    # is trying to allocate a huge buffer for a TEXT field. 
    # Try setting 'text size' to a more reasonable limit 
    text size = 5242880 

# A typical Sybase server 
[egServer50] 
    host = symachine.domain.com 
    port = 5000 
    tds version = 5.0 

# My MS SQL server 
[myhost] 
    host = myhost.mydomain.com 
    port = 1433 
    tds version = 8.0 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^