php pdo_dblib с сервером sql - PullRequest
       0

php pdo_dblib с сервером sql

0 голосов
/ 24 ноября 2018

Я использую расширение PHP pdo_dblib для доступа к MS SQL SERVER.Я использовал это соединение:

$pdosql = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");   

Я получаю данные из таблицы:

$sql = 'SELECT cust_id FROM customers ORDER BY cust_id';
$rez = $pdosql->query($sql);
while($arr = $rez->fetch(PDO::FETCH_NUM)){
    $sql1 = 'SELECT employee_name FROM employes ORDER BY emplyee_name';
    $rez1 = $pdosql->prepare($sql1);
    $rez1->bindValue(':id_cust',$arr[0],PDO::PARAM_INT);
    $rez1->execute();
    $arr1 = $rez1->fetch(PDO::FETCH_NUM);
    echo $arr1[0];
}

Вместо того, чтобы показывать имя первого сотрудника для всех 20 клиентов, запросите данные возврата только для первого клиента.Я нашел решение открыть новый PDO до while:

$pdosql = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");

И все работает отлично.Есть ли другое решение?

Потому что, если у меня while в while, время для извлечения данных увеличивается.

Если я использовал этот код в базе данных MySQL (при правильном подключении), все отлично работает.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я согласен, в вашем запросе удобнее использовать iner join, используя поле, общее между таблицами, которое покажет вам необходимые результаты, я рекомендую по опыту или вы хотите использовать хранимые процедуры.

0 голосов
/ 24 ноября 2018

Похоже, что запрос внутри цикла не содержит параметр.Возможно, добавьте «WHERE cust_id =: id_cust» к запросу:

$sql1 = 'SELECT employee_name FROM employes WHERE cust_id = :id_cust ORDER BY emplyee_name';

Кроме того, вы можете немного оптимизировать свой код, сделав один запрос к базе данных с помощью объединения.Примерно так:

SELECT 
    B.employee_name
FROM customers A 
INNER JOIN employees B 
ON      A.cust_id = B.cust_id
ORDER BY 
    A.cust_id

Однако я также не уверен в дизайне вашей базы данных и не уверен, как на самом деле связаны клиенты и сотрудники.

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