Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取int或float时,PDO SQLSRV和PDO MySQL返回字符串_Php_Mysql_Sql Server_Pdo - Fatal编程技术网

Php 获取int或float时,PDO SQLSRV和PDO MySQL返回字符串

Php 获取int或float时,PDO SQLSRV和PDO MySQL返回字符串,php,mysql,sql-server,pdo,Php,Mysql,Sql Server,Pdo,PDO MS SQL Server和PDO MySQL在获取时都返回字符串数组,即使列的SQL类型是int或float等数字类型。我设法解决了这个问题,但我想知道为什么它们一开始就是这样设计的。这是因为PDO本身不支持它(或者以前不支持它)?使用PDO MySQL调用MySQL\u fetch\u row()时返回。由于PHP是一种松散类型的语言,可以根据需要自动转换为整数,因此我怀疑PDO开发人员选择按原样返回它们。这将比查找每个列类型并动态转换为整数/浮点更快 特别是关于浮点,当从字符串转换

PDO MS SQL Server和PDO MySQL在获取时都返回字符串数组,即使列的SQL类型是int或float等数字类型。我设法解决了这个问题,但我想知道为什么它们一开始就是这样设计的。这是因为PDO本身不支持它(或者以前不支持它)?

使用PDO MySQL调用
MySQL\u fetch\u row()时返回
。由于PHP是一种松散类型的语言,可以根据需要自动转换为整数,因此我怀疑PDO开发人员选择按原样返回它们。这将比查找每个列类型并动态转换为整数/浮点更快

特别是关于浮点,当从字符串转换时,原生PHP浮点可能不同于原始存储值。例如,MySQL列支持精度,而PHP浮动不支持精度。将浮动保留为数据库中的字符串可以让您进行更多的控制(例如,选择以不同的精度使用)

因为PDO本身不支持它(或者以前不支持)

是的,但对于mydsql来说,这并不是因为PDO,而是因为mysqlcapi


因此,目前如果您对基于mysqlnd的PDO实例运行本机准备语句

列的类型无关紧要,它只定义可以存储在其中的内容,而不是从中获取内容时返回的内容的类型。默认情况下,PDO返回的所有内容都是一个字符串,但PHP会进行类型转换,因此
$var=10
$var=“10”(一个整数和一个字符串,都被赋值为10)都被视为数字。还有一个准备好的语句