2012-01-31 100 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