---
title: "PDO, decimaler och setlocale skapar problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/163681-pdo-decimaler-och-setlocale-skapar-problem"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Troxy"
published: "2007-08-21T10:02:49.000Z"
updated: "2007-08-21T13:17:01.000Z"
replies: 2
views: 390
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/163681-pdo-decimaler-och-setlocale-skapar-problem"
---

# PDO, decimaler och setlocale skapar problem

## #1 — Troxy, 2007-08-21T10:02Z

Hej,
när jag sätter en svensk locale så fungerar det inte att utföra en simpel SELECT-fråga med PDO som returnerar kolumner med decimaler. Det blir tvärstopp:

> CGI Error
> The specified CGI application misbehaved by not returning a complete set of HTTP headers.

Här är min testkod:

```php
<?php
setlocale(LC_ALL, 'sve');
$dbHost = new PDO('mssql:host=127.0.0.1;dbname=test', 'test', 'test');
$stmt = $dbHost->query("SELECT (13.37) AS TEST");
$post = $stmt->fetch();
echo $post['TEST'];
```

Om jag raderar setlocale() så försvinner felet. Själva anropet till setlocale() lyckas eftersom dess returvärde blir "Swedish_Sweden.1252".
Det är bara decimaltal i SQL-frågan som ställer till problem. Om jag ändrar till en varchar, datetime eller integer så uppstår inget fel.
Jag kör PHP 5.2.3 på IIS 6.0, och SQL Server 2000.
Tacksam för hjälp om hur jag kan felsöka detta!

Permalänk: https://www.webforum.nu/p/163681

## #2 — SuPeR_ToBBe, 2007-08-21T12:55Z

*Din locale-sträng är fel, för att få svensk (till skillnad från finländsk) svenska, skriv **sv_SE**.*

Såg nu att du får korrekt värde ändå, men vad händer om du ändrar till sv_SE? Har du installerat localen/finns localen i MSSQL?

> **http://www.faqs.org/rfcs/rfc1766 skrev:**
>
> In the primary language tag:
>  \- All 2-letter tags are interpreted according to ISO standard 639, "Code for the representation of names of languages" \[ISO 639\].
> ...
> In the first subtag:
>  \- All 2-letter codes are interpreted as ISO 3166 alpha-2 country codes denoting the area in which the language is used.

Permalänk: https://www.webforum.nu/p/2018645

## #3 — Troxy, 2007-08-21T13:17Z

Jag följde PHP-manualen där det står såhär:

> **http://se.php.net/manual/en/function.setlocale.php skrev:**
>
> Windows users will find useful information about locale strings at Microsoft's MSDN website. Supported language strings can be found at » <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp>

Hur vet jag om min locale finns i MSSQL? Vad behövs installeras?
Varför påverkas ens PDO av detta?

Nu inser jag dock att jag egentligen bara ska använda setlocale() till att skriva ut dagarnas namn på svenska. Så det räcker nog med LC_TIME, vilket även gör att felet försvinner.

Men varför felar det så fatalt med LC_ALL?  :P

Permalänk: https://www.webforum.nu/p/2018648

---

Tråden på webben: https://www.webforum.nu/amne/php/163681-pdo-decimaler-och-setlocale-skapar-problem
