mysqli: как получить тип столбца в таблице - PullRequest
1 голос
/ 29 апреля 2011

Как я могу получить тип столбца в таблице, например, datetime, int (32) или varchar (40)?
Я получил результат, извлекаемый в объект, vardump печатает:1002 *

object(stdClass)[8]
  public 'id' => string '3' (length=1)
  public 'email' => string 'me@foo.bar' (length=6)

id должен быть целым числом и отправить электронное письмо varchar (i).Я работаю с php5 и mysqli.

спасибо за вашу помощь!

Ответы [ 5 ]

12 голосов
/ 23 марта 2014

Если вы используете mysqli, который я настоятельно рекомендую по многим причинам, это будет так же просто, как

$query = "SELECT * from " . $table_name;

if($result = $mysqli->query($query)){
    // Get field information for all columns
    while ($column_info = $result->fetch_field()){
        echo $column_info->type;
    }
}

Это напечатало бы некоторые числа, эти числа указывают тип каждого столбца следующим образом:

Числовые

БИТ: 16

TINYINT: 1

BOOL: 1

SMALLINT: 2

MEDIUMINT: 9

INTEGER: 3

BIGINT: 8

SERIAL: 8

FLOAT: 4

ДВОЙНОЙ: 5

ДЕЦИМАЛЬНО: 246

ЧИСЛО: 246

ИСПРАВЛЕНО: 246

дата

ДАТА: 10

DATETIME: 12

TIMESTAMP: 7

ВРЕМЯ: 11

ГОД: 13

строк и двоичных файлов

CHAR: 254

VARCHAR: 253

ENUM: 254

SET: 254

BINARY: 254

VARBINARY: 253

TINYBLOB: 252

BLOB: 252

СРЕДНИЙ БЛОБ: 252

TINYTEXT: 252

ТЕКСТ: 252

СРЕДНИЙ ТЕКСТ: 252

LONGTEXT: 252

И для получения дополнительной информации о fetch_field проверьте это http://us2.php.net/manual/en/mysqli-result.fetch-field.php

3 голосов
/ 29 апреля 2011

Чтобы получить эту информацию, вам нужно запросить таблицу information_schema.columns. Примерно так получится тип данных MySQL:

SELECT DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = 'my_table' AND COLUMN_NAME = 'my_column'
0 голосов
/ 23 марта 2014

как узнать тип столбца в таблице, например, datetime, int (32) или varchar (40)?

очевидно, вам это не нужно.

id должен быть целым числом и отправлять электронное письмо varchar

Ну, вы должны спросить об этом. Просто используйте подготовленное заявление с mysqli

$stm = $db->prepare("select 1 `int`, 'str' `string`, NULL `NULL`");
$stm->execute();
$res = $stm->get_result();
$row = $res->fetch_assoc();
var_dump($row);

array(3) {
  ["int"]=>
  int(1)
  ["string"]=>
  string(3) "str"
  ["NULL"]=>
  NULL
}
0 голосов
/ 29 апреля 2011

В ответ на ваш комментарий для получения типа данных вы можете выполнить запрос DESC tablename и выполнить итерацию по набору результатов, который даст вам данные по каждому столбцу таблицы.

Это даст вам все для стола, вы, конечно, можете изменить ответ Патрика, чтобы сделать то же самое (или, если вы хотите, чтобы он возвращал это более конкретно).

0 голосов
/ 29 апреля 2011

Все, что php получает из базы данных, всегда имеет тип string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...