Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Microsoft SQL Server / MSDE _ Kolumna typu bigint, po select'ie inna wartość

Napisany przez: phpeff 19.12.2017, 13:18:27

Witam,
Mam bazę danych i tabele na serwerze MSSQL, gdzie jedna z kolumn (id) jest typu (bigint, null) i są do niej zapisane wartości typu:
2000320001019000000,
2000423001021000000.

Do pobrania zawartości używam skryptu:

  1. $dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
  2. } catch (PDOException $e) {
  3. http://www.php.net/echo "Failed to get DB handle: " . $e->getMessage() . "\n";
  4. http://www.php.net/exit;
  5. }
  6. $stmt = $dbh->prepare("SELECT * FROM table_1");
  7. $stmt->execute();
  8. while ($row = $stmt->fetch()) {
  9. http://www.php.net/print_r($row);
  10. }
  11. http://www.php.net/unset($dbh); http://www.php.net/unset($stmt);

W wyniku, dla pola id otrzymuję wartości, dość dziwne:
Array ( [id] => 2.00032000102e+18 [0] => 2.00032000102e+18
Array ( [id] => 2.000083003375e+18 [0] => 2.000083003375e+18
Array ( [id] => 2.000531010747e+18 [0] => 2.000531010747e+18

O co tutaj chodzi? Dlaczego jest to tak konwertowane?

Napisany przez: Lion 20.12.2017, 18:24:54

Wartość wygląda poprawnie, wykładnik się zgadza. Sprawdź var_dumpem czy to jest integer czy string.

Napisany przez: sabat24 20.12.2017, 18:54:57

Obstawiałbym float. Jeśli chcesz mieć wartość "normalną" musisz zrzutować to na stringa. Strzelałbym w coś takiego:

  1. SELECT CAST(ID AS VARCHAR)


albo na poziomie php
  1. $ID = gmp_init($your_id_as_string_or_int);
  2. $IDstr = gmp_strval($ID;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)