如何通过PDO MYSQL将值显示为数字而不带引号?
问题的原因是从数据库中读取的数据都被当作字符串处理,而不是其原本的数据类型。为了将这些字符串转换为数字,可以在循环中使用强制类型转换将其转换为整数值,例如在循环中使用以下代码:
$result_arr[] = array($db_row['name'], (int)$db_row['count']);
然后在调用json_encode($result_arr)
时,将正确地将其格式化为数字。这样你就可以控制来自数据库的数据是数字还是其他类型。
解决方法是使用json_encode()
函数的第二个参数JSON_NUMERIC_CHECK
标志来在编码过程中动态地将字符串转换为数字。然而,需要小心使用这个标志,因为它可能会导致一些问题。以下是一个用户在文档中的示例:
<?php // 国际电话号码 json_encode(array('phone_number' => '+33123456789'), JSON_NUMERIC_CHECK); ?>
然后你会得到这样的JSON:
{"phone_number":33123456789}
是的,问题似乎是由于数据库适配器没有正确解释数据类型,而不是json_encode
函数的问题。这是最正确的答案,但需要小心使用JSON_NUMERIC_CHECK
,因为它还会将电话号码和其他数字字符串值转换为数字,这可能会在前导零或“+”方面引起问题...我建议在读取数据库的函数中纠正这个问题。
问题的原因是使用json_encode函数将数组转换为JSON字符串时,会将所有看起来像数字的属性都转换为数字。这可能会导致一些意外的结果,因为消费JSON的代码可能对类型有特定的期望。解决方法是选择性地转换你想要的值,而不是使用JSON_NUMERIC_CHECK选项。
如果你仍然想要将数字作为数字显示,而不是带有引号的字符串,可以使用以下方法:
在PHP 5.3.3之后,可以使用JSON_NUMERIC_CHECK选项来自动转换数字。示例代码如下:
$arr = array( 'row_id' => '1', 'name' => 'George' ); echo json_encode( $arr, JSON_NUMERIC_CHECK ); // {"row_id":1,"name":"George"}
然而,JSON_NUMERIC_CHECK选项会将所有看起来像数字的属性都转换为数字,这可能会导致一些意外的结果。如果你关心最佳实践和安全性,应该选择性地转换你想要的值。
一个解决方法是在需要转换为数字的字段后面添加一个特殊的标记,然后使用JSON_NUMERIC_CHECK选项进行转换,最后从JSON字符串中移除该标记。示例代码如下:
$marked_json = json_encode( $arr, JSON_NUMERIC_CHECK ); $cleaned_json = str_replace('this_is_a_string', '', $marked_json);
这种方法虽然不够优雅,但可以解决将字符串转换为数字时的问题。
总结起来,为了在使用PDO和MySQL时以数字形式显示值而不是带有引号的字符串,可以使用JSON_NUMERIC_CHECK选项。然而,这种方法可能会导致一些意外的结果,因此最好选择性地转换你想要的值。如果你知道每个字段的类型,可以使用添加标记和替换的方法来解决这个问题。