gpt4 book ai didi

PHP:如何根据 MySQL 类型转换 mysqli_result->fetch_object() 的属性?

转载 作者:可可西里 更新时间:2023-11-01 07:22:42 28 4
gpt4 key购买 nike

我正在尝试根据 MySQL 中定义的类型转换 mysqli_result->fetch_object() 的属性。

例如,如果我的 id 列在 MySQL 中是 bigint(20),我想要 mysqli_result->fetch_object()->id 是一个整数,而不是一个字符串。

根据docs ,此方法返回一个字符串属性的对象。是否可以获取数据类型?

最佳答案

您可以执行此操作以获取有关结果集的详细元数据信息:$mysqli->fetch_field_direct() .

页面示例:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Name LIMIT 5";

if ($result = $mysqli->query($query)) {

/* Get field information for column 'SurfaceArea' */
$finfo = $result->fetch_field_direct(1);

printf("Name: %s\n", $finfo->name);
printf("Table: %s\n", $finfo->table);
printf("max. Len: %d\n", $finfo->max_length);
printf("Flags: %d\n", $finfo->flags);
printf("Type: %d\n", $finfo->type);

$result->close();
}

/* close connection */
$mysqli->close();
?>

这些是类型的枚举值:

enum_field_types {
MYSQL_TYPE_DECIMAL,
MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT,
MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT,
MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL,
MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,
MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE,
MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME,
MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE,
MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_NEWDECIMAL=246,
MYSQL_TYPE_ENUM=247,
MYSQL_TYPE_SET=248,
MYSQL_TYPE_TINY_BLOB=249,
MYSQL_TYPE_MEDIUM_BLOB=250,
MYSQL_TYPE_LONG_BLOB=251,
MYSQL_TYPE_BLOB=252,
MYSQL_TYPE_VAR_STRING=253,
MYSQL_TYPE_STRING=254,
MYSQL_TYPE_GEOMETRY=255
};

这是我写的关于这个主题的非常详细的答案:https://stackoverflow.com/a/19761805/623952 - 它向您展示了如何将其与查询结果合并。该问题的 OP 是西类牙语(我认为?)所以行集被称为 $proceso(而不是正常的“$row”)并且他们的查询包含一个 limit 1,所以要考虑到这一点。

这是一个片段...但您应该去看看完整的答案,因为我包含了很多额外的细节和信息。

<?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);
?>

关于PHP:如何根据 MySQL 类型转换 mysqli_result->fetch_object() 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059756/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com