Vintage Beef
Vintage Beef

Reputation: 475

PHP PDO Sqlsrv always return every values as string

How do I get value from DB with correct field type?

I'm using PDO Sqlsrv to fetch data from DB and I always receive data as string like: customer_id : "1" My customer_id field type is integer it should be customer_id : 1 But phone_number field type is varchar it return to correct type as string like: phone_number : "12345678"

EDIT:

I'm using PHP 5.5. I've tried this.

$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);

And I got this error Fatal error: Undefined class constant 'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE'

My PDO code :

$this->dbh = new PDO('sqlsrv:Server=' . $_ENV['DB_HOST'] . ';Database=' . $_ENV['DB_NAME'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$this->dbh->exec('set names ' . $_ENV['DB_CHAR_SET']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); // Got Error 
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);

Upvotes: 5

Views: 1868

Answers (2)

Zhorov
Zhorov

Reputation: 29983

Solution:

I will answer exactly to your question and what you may try is to use PDOStatement::bindColumn. You use PHP 5.5 and based on support matrix, your PHP Driver version should be 3.1 or 3.2. In this version, based on change log, SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is not supported.

...
$stmt->bindColumn('customer_id', $customer_id, PDO::PARAM_INT);
$stmt->bindColumn('phone_number', $phone_number, PDO::PARAM_STR);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    var_dump($customer_id);
    var_dump($phone_number);
    echo '<br>';
}
...

Upvotes: 2

&#193;lvaro Gonz&#225;lez
&#193;lvaro Gonz&#225;lez

Reputation: 146460

You don't say what version of SQLSRV you are using but chances are that it's older than 4.0.8, when the directive was implemented:

[Added]
- SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute support.

I don't think there's a simple generic way to determine what your version is (phpinfo()'s output does not display it) but you can just upgrade to latest version.

Update: try sqlsrv_client_info().

Upvotes: 0

Related Questions