如何通过PDO MYSQL将值显示为数字而不带引号?

24 浏览
0 Comments

如何通过PDO MYSQL将值显示为数字而不带引号?

我在使用PHP的json_encode函数时遇到了一个问题。它将数字编码为字符串,例如array('id' => 3)会变成"{ ["id": "3", ...)。当JavaScript遇到这些值时,它将其解释为字符串,导致数值运算失败。有人知道如何阻止json_encode将数字编码为字符串吗?谢谢!

0
0 Comments

问题原因:

- PHP的json_encode函数在处理数字时,默认将其转换为字符串。

- 数据库查询结果可能会以字符串的形式返回数字类型的数据。

解决方法:

- 在PHP中,可以通过将数字类型的值强制转换为整型或浮点型,来确保返回正确的数据类型。

- 可以使用var_dump函数来检查数据的类型。

- 可以使用循环遍历结果并将其转换为整型。

- 可以使用自定义的函数,通过array_walk函数将字符串类型的数字转换为整型。

- 可以考虑使用数据库适配器mysqlnd来解决MySQL查询结果返回为字符串的问题。

以上是我个人的理解和总结,希望能对你有所帮助。

0
0 Comments

问题的原因是从数据库中读取的数据都被当作字符串处理,而不是其原本的数据类型。为了将这些字符串转换为数字,可以在循环中使用强制类型转换将其转换为整数值,例如在循环中使用以下代码:

$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,因为它还会将电话号码和其他数字字符串值转换为数字,这可能会在前导零或“+”方面引起问题...我建议在读取数据库的函数中纠正这个问题。

0
0 Comments

问题的原因是使用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选项。然而,这种方法可能会导致一些意外的结果,因此最好选择性地转换你想要的值。如果你知道每个字段的类型,可以使用添加标记和替换的方法来解决这个问题。

0