如何获取字段类型和值?
我目前试图建立使用的MySQL/PHP的一种形式,下面是我的代码的一部分,到目前为止如何获取字段类型和值?
块#1:
$proceso = mysqli_fetch_assoc($result); // my query returns only one row
...
<form action='actualizar.php' method='Post'>
<?php
foreach(array_keys($proceso) as $key){
echo "<label for='$key'>$key: </label>";
echo "<input name='$key' value='".$proceso[$key]."'><br/>";
}
echo "<input type='hidden' name='View' value='$view'>";
?>
<input type="submit" value="Actualizar">
</form>
这至今是让我一个形式在那里我使用字段名称来生成标签和输入框,我显示字段值。我想进一步格式化一些使用jquery datepicker的字段,但仅限于那些在mysql表中具有type = Date的字段。
我一直在使用类似的尝试mysqli_fetch_field_direct
:
块#2:
$fields = mysqli_num_fields($result);
for ($i=0; $i < $fields; $i++) {
$field_types[] = $result->fetch_field_direct($i)->type;
}
但在这种情况下,我不能得到的价值,只是类型
有没有一种简单的方法来获得字段的类型和价值?
编辑,以(尝试)来简化:
比方说,我有一个名为email
场其类型= varchar
和我的SQL查询产生一个结果[email protected]
从块#1,我得到:
-------------------------------
Field-Name | Field-Value
email | [email protected]
从块#2,我得到:
-------------------------------
Field-Name | Field-Type
email | varchar
什么,我想是让
-------------------------------
Field-Name | Field-Type | Field-Value
email | varchar | [email protected]
这是因为我想用字段类型为CSS类添加到输入框(如使用日期选择器)。
编辑:我把输出的表,因为我无法入睡......
好了...看,如果这是你想要的...
这是一个表
mysql> describe user;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| User_ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
| Email | varchar(100) | YES | | NULL | |
| Name | varchar(100) | YES | | NULL | |
| Password | varchar(100) | YES | | NULL | |
| FB_ID | int(11) | YES | | NULL | |
| Total_Score | int(11) | YES | | 0 | |
| add_date | datetime | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
,并从DB:我对不同的SO问题作出
mysql> select * from user limit 1;
+---------+-------+------+----------+-------+-------------+---------------------+
| User_ID | Email | Name | Password | FB_ID | Total_Score | add_date |
+---------+-------+------+----------+-------+-------------+---------------------+
| 1 | NULL | kim | NULL | NULL | 10 | 2013-11-03 23:04:08 |
+---------+-------+------+----------+-------+-------------+---------------------+
+
1 row in set (0.00 sec)
和代码:
<?php
$mysqli = mysqli_connect("localhost", "root", "", "test");
// this came from http://php.net/manual/en/mysqli-result.fetch-field-direct.php
$mysql_data_type_hash = array(
1=>'tinyint',
2=>'smallint',
3=>'int',
4=>'float',
5=>'double',
7=>'timestamp',
8=>'bigint',
9=>'mediumint',
10=>'date',
11=>'time',
12=>'datetime',
13=>'year',
16=>'bit',
//252 is currently mapped to all text and blob types (MySQL 5.0.51a)
253=>'varchar',
254=>'char',
246=>'decimal'
);
// run the query...
$result = $mysqli->query("select * from user limit 1");
// get one row of data from the query results
$proceso = mysqli_fetch_assoc($result);
print "<table>
<tr>
<th>\$key</th>
<th>\$value</th>
<th>\$datatype</th>
<th>\$dt_str</th>
</tr> ";
// to count columns for fetch_field_direct()
$count = 0;
// foreach column in that row...
foreach ($proceso as $key => $value)
{
$datatype = $result->fetch_field_direct($count)->type;
$dt_str = $mysql_data_type_hash[$datatype];
$value = (empty($value)) ? 'null' : $value;
print "<tr>
<td>$key</td>
<td>$value</td>
<td class='right'>$datatype</td>
<td>$dt_str</td>
</tr> ";
$count++;
}
print "</table>";
mysqli_close($mysqli);
?>
<style>
/* this is css that you don't need but i was bored so i made it pretty...! */
table { font-family:Courier New;
border-color:#E5E8E3; border-style:solid; border-weight:1px; border-collapse:collapse;}
td,th { padding-left:5px; padding-right:5px; margin-right:20px;
border-color:#E5E8E3; border-style:solid; border-weight:1px; }
.right { text-align:right }
</style>
所以......澄清...
您可以使用在foreach
这些变量来输出或然而利用这些信息你想要的:(我用我的输出的第一行,为USER_ID,作为一个例子)
$key
是列/字段名称(如user_id
)$field_types[$key]
来自$result->fetch_field_direct($i)->type
(如3
)$mysql_data_type_hash[$datatype]
是在代码顶部使用$mysql_data_type_hash
数组的数据类型的字符串版本。这并不是必须的,但是我将它包含在内,所以这个例子更加清晰。 (如int
)$proceso[$key] = $value =
是你本次迭代的foreach语句(如1
)的值
输出:
$key $value $datatype $dt_str
User_ID 1 3 int
Email null 253 varchar
Name kim 253 varchar
Password null 253 varchar
FB_ID null 3 int
Total_Score 10 3 int
add_date 2013-11-03 23:04:08 12 datetime
我很困惑...是' $ proceso [$ key]'不是值? –
是的,在第一个代码块中,我得到的是值,但不是类型,而在第二个代码块中,我得到的是类型,但不是值。我有一个很难的第一个块用'mysqli_fetch_field_direct'混合我不知道我怎么会为了有类似同时获得: '回声““;'在一个更简单的过程中。 – AlvaroFG
我在下面发布了一些内容......我不确定它是否正是你想要的。让我知道,如果你需要我,我可以修改它。 –