我使用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数据库中使用了此代码,则一切正常。
答案 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>