我正在编写一个带有mysqli_result的函数,并将所有返回的列添加到结果对象的关联数组中。截至目前,通过mysqli :: multi_query返回的所有内容都是字符串格式,而值应该是什么值类型的描述保存在mysqli :: fetch_fields返回的对象数组中。我觉得到目前为止这很令人困惑,所以让我编写代码
if ($mysqli->multi_query($inputQuery)) {
if ($result = $mysqli->store_result()) {
//$fields is an array of custom objects
$fields = $result->fetch_fields();
//$fieldType is an integer that is the value of a mysqli predefined constant
$fieldType = $fields[0]->type;
if ($curRow = $result->fetch_row()) {
//No matter what the value type in the database of this item is, and no
//matter what $fieldType corresponds to, $curVal is going to be a string
$curVal = $curRow[0];
}
}
}
根据我的理解,$fieldType
所取的整数是预定义的mysqli常量的值,可在此处找到:http://www.php.net/manual/en/mysqli.constants.php
我知道这里发布了一个类似的问题:PHP mysqli_fetch_field data type但我更感兴趣的是将值映射回各自的键。
我想要做的是根据$curVal
到mysqli预定义常量的映射,将$fieldType
的字符串值转换为正确的值类型。我想我可以对每个预定义常量进行强力检查,或者我可以创建一个带有值的关联数组 - >键而不是键 - >价值,然后参考,但我觉得应该有一个更容易的方法来解决这个问题。
那么,我的问题是,在PHP中通过其值找到预定义常量的最简单方法是什么?我是否以与访问PHP中的全局常量相同的方式访问这些mysqli预定义常量,还是必须执行$mysqli->PREDEFINED_CONSTANT
之类的操作?
致以最诚挚的问候,
答案 0 :(得分:4)
常量不是对象的一部分,因此使用$ mysqli :: CONSTSANT或$ mysqli-> CONSTANT将无法正常工作。
以下是示例的开头。您必须查看MySQLi constants的其余部分并完成switch
语句。未包含的内容将保留字符串。
$result = $mysqli->query('SELECT * FROM `accounts`');
$fields = $result->fetch_fields();
// Loop through each row.
while ( $row = $result->fetch_row() )
{
// Loop through each field.
foreach ( $row as $key => &$value )
{
// Using the $key, find the type of the current field.
switch ( $fields[$key]->type )
{
// Convert INT to an integer.
case MYSQLI_TYPE_TINY:
case MYSQLI_TYPE_SHORT:
case MYSQLI_TYPE_LONG:
case MYSQLI_TYPE_LONGLONG:
case MYSQLI_TYPE_INT24:
$value = intval($value);
break;
// Convert FLOAT to a float.
case MYSQLI_TYPE_FLOAT:
case MYSQLI_TYPE_DOUBLE:
$value = floatval($value);
break;
// Convert TIMESTAMP to a DateTime object.
case MYSQLI_TYPE_TIMESTAMP:
case MYSQLI_TYPE_DATE:
case MYSQLI_TYPE_DATETIME:
$value = new DateTime($value);
break;
}
}
var_dump($row);
}
答案 1 :(得分:1)
有get_defined_constants()
,其中列出了所有define()
'd常量,然后您可以从中获取它们的值。
尽管如此,这引出了为什么一切都以字符串形式回归的问题。您是否试图通过将所有内容以通用形式存储在一个包含value
和type
对的表中来破坏SQL数据库的用途?