2012-01-31 97 views
0

所以我使用以下函数来获取SQL数据库中某些字段的数据类型。PHP SQL函数不会返回有效的SQL数据类型

$type = mysql_field_type($result, $i); 
$len = mysql_field_len($result, $i); 

我需要使用这些数据类型来最终构造另一个表。问题是我从这些函数得到的回报是无效的SQL数据类型,我得到的回报如下:string(25),int(11),string(25)

Int是可以的,但string不是SQL数据类型,那么我是否需要确定哪些返回需要重新格式化为正确的数据类型并使函数能够这样做?或者我错过了另一种方式来做到这一点?

+1

我会建议由Travesty3的解决方案 - 使用'INFORMATION_SCHEMA.COLUMNS'和/或'INFORMATION_SCHEMA.TABLES' – Abhay 2012-01-31 15:26:01

回答

2

你将看到mysql_field_type()函数将返回下列数据为全(http://it2.php.net/mysql_field_type) :

CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET: string 
TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER, BIGINT: int 
FLOAT, DOUBLE, DECIMAL, NUMERIC: real 
TIMESTAMP: timestamp 
YEAR: year 
DATE: date 
TIME: time 
DATETIME: datetime 
TINYBLOB, MEDIUMBLOB, LONGBLOB, BLOB: blob 

或许你可以尝试,而像:

$table = "my_table"; 
$result = mysql_query("DESCRIBE TABLE `{$tabler}`"); 
while ($row = mysql_fetch_object($result)) { 
    $field = $row->Field; 
    $type = $row->Type; 
} 

希望有所帮助。

1

尝试运行的查询是这样的:

SELECT column_type FROM information_schema.columns WHERE table_schema = 'databaseName' AND table_name = 'tableName' AND column_name = 'columnName'; 
0

那是因为mysql_field_len回报模式的长度,如果它存在

将得到id字段的长度在数据库中指定
http://php.net/manual/en/function.mysql-field-len.php

另外stringmysql_field_type的有效回报,不确定是什么问题。

<?php 
mysql_connect("localhost", "mysql_username", "mysql_password"); 
mysql_select_db("mysql"); 
$result = mysql_query("SELECT * FROM func"); 
$fields = mysql_num_fields($result); 
$rows = mysql_num_rows($result); 
$table = mysql_field_table($result, 0); 
echo "Your '" . $table . "' table has " . $fields . " fields and " . $rows . " record(s)\n"; 
echo "The table has the following fields:\n"; 
for ($i=0; $i < $fields; $i++) { 
    $type = mysql_field_type($result, $i); 
    $name = mysql_field_name($result, $i); 
    $len = mysql_field_len($result, $i); 
    $flags = mysql_field_flags($result, $i); 
    echo $type . " " . $name . " " . $len . " " . $flags . "\n"; 
} 
mysql_free_result($result); 
mysql_close(); 
?> 

价:http://www.php.net/manual/en/function.mysql-field-type.php

+0

在'mysql_field_len'的描述,在这里它说,它返回架构的长度?我看到的描述是“返回指定字段的长度”。是的,'string'是'mysql_field_type'的有效返回值,但在MySQL中不是一个有效的数据类型,正如OP在文章中所说的那样。他需要使用现有列的数据类型来创建另一个表,并且'string'在创建表时不是有效的MySQL数据类型。 – Travesty3 2012-01-31 15:18:54