Можно ли получить значения базы данных в php как тип, определенный в базе данных, а не строку типа? - PullRequest
2 голосов
/ 16 ноября 2011

Если я определяю столбец в базе данных mysql как тип int, мои запросы всегда возвращают значения в виде строки типа.

Есть ли способ получить правильный тип?

Ответы [ 4 ]

2 голосов
/ 16 ноября 2011

Да, используя PDO и драйвер mysqlnd , вы можете получить целые числа как тип (int).

, например

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
    var_dump($row);
}

function setup($pdo) {
    $pdo->exec('CREATE TEMPORARY TABLE soFoo (
        id int auto_increment,
        s varchar(32),
        t datetime,
        primary key(id)
    )');

    $pdo->exec("INSERT INTO soFoo (s,t) VALUES ('abc', Now()), (NULL, Now())");
}

печать

array(3) {
  ["id"]=>
  int(1)
  ["s"]=>
  string(3) "abc"
  ["t"]=>
  string(19) "2011-11-16 13:34:27"
}
array(3) {
  ["id"]=>
  int(2)
  ["s"]=>
  NULL
  ["t"]=>
  string(19) "2011-11-16 13:34:27"
}

на моей машине. Как видите, id возвращается как целое число.

0 голосов
/ 16 ноября 2011

Я уверен, что PHP обычно конвертирует их автоматически.

$val = $the_string_from_database;
$val *= 2;
echo $val;
0 голосов
/ 16 ноября 2011

Когда данные возвращаются из mySQL в PHP с использованием стандартных функций, тип данных всегда преобразуется в строку. Вы всегда можете преобразовать это обратно, используя что-то вроде:

$int = (int) $sql_row['integer_cell'];

Вы также можете использовать intval() для преобразования типа обратно.

$int = intval($sql_row['integer_cell'];

Это частично объясняется свободным приведением типов в PHP.

0 голосов
/ 16 ноября 2011

Вы можете узнать тип поля с помощью функции mysql_field_type () и затем привести значение к соответствующему типу.

Первый параметр - это запрос var, а второй - индекс столбца взапрос.

Пример:

$result = mysql_query("SELECT id, name, age FROM users");
$type  = mysql_field_type($result, 2); // Will return the type of "age"
...