php pdo_dblib与SQL Server

时间:2018-11-24 19:00:49

标签: php sql-server pdo

我使用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个客户的第一位员工的姓名,仅查询第一位客户的返回数据。 我找到了在while之前打开新PDO的解决方案:

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

一切正常。 还有其他解决方案吗?

因为如果我在while中有while,则检索数据的时间在增加。

如果我在具有正确连接的mySQL数据库中使用了此代码,则一切正常。

2 个答案:

答案 0 :(得分:0)

看起来循环内的查询不包含参数。 也许在查询中添加“ WHERE cust_id =:id_cust”:

function sortMenuItems(a, b) {
  const labelA = a.label.toUpperCase(); // ignore upper and lowercase
  const labelB = b.label.toUpperCase(); // ignore upper and lowercase

  if (labelA < labelB ) {
    return -1;
  } else if (labelA > labelB ) {
    return 1;
  } else {
     // labels must be equal
     return 0;
  }
}

此外,您可以通过使用联接对数据库进行一个查询来稍微优化代码。像这样:

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

但是,我也不确定您的数据库设计,也不确定客户和员工之间的实际联系。

答案 1 :(得分:0)

我同意,在查询中使用内部联接,在表之间使用一个公共字段,这将更实用,这将向您显示所需的结果,我建议根据经验或您想使用存储过程。 / p>