С PDO для php столкнулся недавно, поэтому, если неправ, сильно тапками не кидайтесь. Итак...
Имеется FreeBSD 11.2-RELEASE-p8, на ней
apache24-2.4.37
freetds-1.00.109,1
php72-7.2.14
php72-pdo-7.2.14
php72-pdo_dblib-7.2.14
Полный список установленных модулей php не привожу для экономии места.
Собственно, в процессе ознакомления с PDO натолкнулся на непонятное.
Код: Выделить всё
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$host='mssql'
$dbname='testbase';
$user='guest1';
$psw='guest1';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_LAZY,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn= "dblib:host=$host;dbname=$dbname";
try {
$db_link = new PDO($dsn, $user, $psw, $opt);
}
catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
print "<b>Успешное подключение к БД!</b><br>";
$clientId=879;
$query="SELECT [name], [pst], [officeid] FROM [dbo].[Clients] WHERE [clientid]=?";
$stmt1 = $db_link->prepare($query);
$stmt1->execute(array($clientId));
$line1 = $stmt1->fetch();
print_r ($line1); print ('<br>');
print ('111 '.$line1['name'].';'.$line1['pst'].';'.$line1['officeid'].'<br><br>');
$id=$line1['officeid'];
$query3="SELECT [pid], [name] FROM [dbo].[offices] WHERE [id]=?";
$stmt3 = $db_link->prepare($query3);
$stmt3->execute(array($id));
$line = $stmt3->fetch();
print_r ($line); print ('<br>');
print ('line='.$line['pid'].';'.$line['name'].'<br>');
print ('<br>');
print_r ($line1); print ('<br>');
print ('222 '.$line1['name'].';'.$line1['pst'].';'.$line1['officeid'].'<br>');
При выполнении, получаю:
Код: Выделить всё
Успешное подключение к БД!
PDORow Object ( [queryString] => SELECT [name], [pst], [officeid] FROM [dbo].[Clients] WHERE clientid=? [name] => Иванов Иван Иванович [pst] => Электроник [officeid] => 56 )
111 Иванов Иван Иванович;Электроник;56
PDORow Object ( [queryString] => SELECT pid, name FROM dbo.offices WHERE [id]=? [pid] => 154 [name] => Цех связи )
line=154;Цех связи
PDORow Object ( [queryString] => SELECT [name], [pst], [officeid] FROM [dbo].[Clients] WHERE clientid=? [name] => 154 [pst] => Цех связи [officeid] => )
222 154;Цех связи;
Если изменить опцию открытия базы, например на PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, эффект пропадает.
Код: Выделить всё
Успешное подключение к БД!
Array ( [name] => Иванов Иван Иванович [pst] => Электроник [officeid] => 56 )
111 Иванов Иван Иванович;Электроник;56
Array ( [pid] => 154 [name] => Цех связи )
line=154;Цех связи
Array ( [name] => Иванов Иван Иванович [pst] => Электроник [officeid] => 56 )
222 Иванов Иван Иванович;Электроник;56