有没有现成的函数来做到这一点。大多数情况下,您会发现没有即时解决方案来解决您的问题。您必须自己编写代码,这并不难:查询获取所有文件名的数据库,使用结果创建数组,然后在您拥有的数组与查询结果之间获取差异。
一个基本的例子是:
$stmt = $pdo->prepare('SELECT PROCESSED FROM db.table WHERE PROCESSED IN (?,?,?)');
$stmt->execute($allFiles);
$existing = array();
while($row = $stmt->fetch(PDO::FETCH_OBJ))
$existing[] = $row->PROCESSED;//construct array containing existing values
$notFound = array_diff($allFiles, $existing);
var_dump($notFound);
你可以使查询一点点更有活力,通过使用$allFiles
数组的长度,并相应地添加?
占位符:
$allFiles = array_filter(array_unique($allFiles));//clean array
$placeholders = array_fill(0, count($allFiles), '?');
$stmt = $pdo->prepare(
'SELECT PROCESSED FROM db.table WHERE PROCESSED IN ('.implode(',', $placeholders).')'
);
//alternative:
$stmt = $pdo->prepare(
'SELECT PROCESSED FROM db.table WHERE PROCESSED IN ('.
substr(
str_repeat('?,',count($allFiles)),//repeat ?, as many times as there are values
0,-1//remove trailing ","
).')'
);
$stmt->execute(array_values($allFiles));//better safe than sorry
//rest is the same as before
这让你处理任何长度的数组。
http://php.net/manual/en/function.array-diff.php? – Sherlock 2014-10-08 12:54:22
没有现成的功能来做到这一点。大多数情况下,您会发现没有即时解决方案来解决您的问题。您必须自己编写代码,这并不难:查询DB获取所有文件名,使用结果创建一个数组,然后获取您拥有的数组之间的差异,并查询结果 – 2014-10-08 12:58:01
@ Sherlock非常感谢,并没有这么想,因为认为这是一个PDO功能! – 2014-10-08 12:59:26