Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 PDO+;MySQL总是返回字符串,但是MsSQL呢?_Php_Mysql_Sql Server_Pdo - Fatal编程技术网

Php PDO+;MySQL总是返回字符串,但是MsSQL呢?

Php PDO+;MySQL总是返回字符串,但是MsSQL呢?,php,mysql,sql-server,pdo,Php,Mysql,Sql Server,Pdo,使用MySQL时,PDO总是以字符串形式返回字段值。当使用另一个数据库(如MSSQL)时,PDO是否一致 如果没有,是否有一个标志强制PDO始终返回字符串(为了一致性)?还是最好为所有值返回本机类型 据我所知,Drupal使使用PDO使用不同的数据库成为可能。它执行必要的转换,使SQL语句与不同的语法兼容。但是它如何处理查询结果中的数据类型呢?据我所知,这取决于数据库引擎 不久前,PDO会为Postgres中的布尔字段返回一个t或f字符串,我隐约记得上次使用它时它返回的是true或false布尔

使用MySQL时,PDO总是以字符串形式返回字段值。当使用另一个数据库(如MSSQL)时,PDO是否一致

如果没有,是否有一个标志强制PDO始终返回字符串(为了一致性)?还是最好为所有值返回本机类型


据我所知,Drupal使使用PDO使用不同的数据库成为可能。它执行必要的转换,使SQL语句与不同的语法兼容。但是它如何处理查询结果中的数据类型呢?

据我所知,这取决于数据库引擎

不久前,PDO会为Postgres中的布尔字段返回一个
t
f
字符串,我隐约记得上次使用它时它返回的是
true
false
布尔值

检查getColumnMeta()后,可以将结果规范化为本机类型:

不过,这样做需要附加一些条件。php手册中的警告只有一个。从一个引擎返回到下一个引擎的不一致值是另一个:


如果要确保始终获得字符串,可以使用bindColumn()并指定每列的数据类型

$sql = 'SELECT id, name FROM test';
$stmt = $dbh->query($sql);
/* Bind by column number */
$stmt->bindColumn(1, $id, PDO::PARAM_STR); //or PDO::PARAM_INT
$stmt->bindColumn(2, $name, PDO::PARAM_STR);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
  var_dump($id); var_dump($name);
}
这可能有用: