避免/最小化PHP中的循环SQL查询

避免/最小化PHP中的循环SQL查询,php,arrays,sql-server,pdo,Php,Arrays,Sql Server,Pdo,假设我有一个$array元素(及其关联的子元素),大致遵循以下格式: [0] => Array ( [valA] => PA0000001 [valB] => qwerty [valC] => asdfgh [valD] => zxcvbn [valE] => poiuyt [valF] => lkjhgf ) 以此类推,可能有大量的元素(和子元素)。我想使用此数组在我的SQL Server数据库中创建和更新记录。但

假设我有一个$array元素(及其关联的子元素),大致遵循以下格式:

[0] => Array (
   [valA] => PA0000001
   [valB] => qwerty
   [valC] => asdfgh
   [valD] => zxcvbn
   [valE] => poiuyt
   [valF] => lkjhgf
)
以此类推,可能有大量的元素(和子元素)。我想使用此数组在我的SQL Server数据库中创建和更新记录。但在我发布所有这些记录之前,我想根据一组预先确定的规则检查它们。例如:

表Alpha上的alphID列中必须存在valA

valB必须存在于表Bravo的bravId列中

valD必须存在于表Delta的deltID列中

valF必须存在于表Foxtrot的foxID列中

显而易见的解决方案是循环遍历数组的每个元素,并运行如下查询:

$sql = "SELECT (SELECT alphID FROM Alpha WHERE alphID = :alphID) AS AlphaExists, 
       (SELECT bravID FROM Bravo WHERE bravID = :bravID) AS BravoExists,
       (SELECT deltID FROM Delta WHERE deltID = :deltID) AS DeltaExists,
       (SELECT foxID FROM Foxtrot WHERE foxID = :foxID) AS FoxtrotExists";
$stmt = $this->_db->prepare($sql);
//Bind PDO values with appropriate array values here
$rslt = $stmt->fetch(PDO::FETCH_ASSOC);
return($rslt);
然后用它来确保一切正常

但是,这并不能很好地扩展—连接到数据库、运行查询、返回结果并分配结果的开销对于一个查询来说很小,但是当有数千个查询时,很快就变得不可行


有没有更好、更有效的方法来执行这些查找并返回一些信息,告诉我每个元素满足/不满足哪些规则?

有没有不使用外键约束的原因?如果查询违反外键约束,数据库将抛出错误。@frz3993我假设您的意思是执行插入/更新并依赖那里的外键约束?该规范要求用户在提交数据之前能够看到其数据的所有预期问题。数据库只会告诉我它首先遇到的任何错误,然后停止,除非我猜错了,而且他们不是技术人员。给他们一条SQL Server错误消息并不理想。此外,有些规则不是“是否存在”(例如,显示哪些现有记录将更改或添加),这使得使用FKs存在问题。