PDO + MySQL всегда возвращает строки, но как насчет MsSQL? - PullRequest
6 голосов
/ 16 мая 2011

PDO всегда возвращает значения полей в виде строк при использовании MySQL.Является ли PDO согласованным при использовании другой базы данных, такой как MSSQL?

Если нет, есть ли флаг, который заставляет PDO всегда возвращать строки (для обеспечения согласованности)?или еще лучше возвращать нативные типы для всех значений?

Из того, что я могу сказать, Drupal позволяет использовать разные базы данных, используя PDO.Он выполняет необходимые преобразования для обеспечения совместимости операторов SQL с различными синтаксисами.Но как это относится к типам данных в результатах запроса?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Если вы хотите убедиться, что вы всегда получаете строки, вы можете использовать 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);
}
1 голос
/ 16 мая 2011

Насколько я помню, это зависит от движка БД.

Некоторое время назад PDO возвращал строки t или f для логических полей в Postgres, и я смутно припоминаю, что он возвращал логическое значение true или false в последний раз, когда я его использовал.

Вы можете нормализовать результаты в нативные типы после проверки getColumnMeta ():

http://us3.php.net/manual/en/pdostatement.getcolumnmeta.php

Это происходит с несколькими прикрепленными строками. Предупреждения в руководстве по PHP являются одним. Несогласованные значения, возвращаемые от двигателя к следующему, являются другими:

Список PHP native_type для PDO getColumnMeta ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...