更新php数组中不包含行的mysql表

更新php数组中不包含行的mysql表,php,arrays,Php,Arrays,我有一系列的项目: $expiringDomains = array('dom1.com', 'dom2.com'); 如何在表上运行更新以更新表中的域不在数组中的所有行 $sql = $mysqli->query("UPDATE FROM customer_domains set reminder1 = '', reminder2 = '', reminder3 = '' WHERE domain = '';"); 我知道我可以通过数组执行PHP循环,但我希望它尽可能快地运行-数组最

我有一系列的项目:

$expiringDomains = array('dom1.com', 'dom2.com');
如何在表上运行更新以更新表中的
域不在数组中的所有行

$sql = $mysqli->query("UPDATE FROM customer_domains set reminder1 = '', reminder2 = '', reminder3 = '' WHERE domain = '';");

我知道我可以通过数组执行PHP循环,但我希望它尽可能快地运行-数组最多可以获得20000个或更多项,像这样的未准备好的受信任数据需要知道,您的域将是没有
字符或其他可插入的废话的有效域

SQL语句中也有错误,UPDATE语句中不应该有FROM

<?php

$expiringDomains = array('dom1.com', 'dom2.com');

$query = "
  UPDATE customer_domains
  SET reminder1 = '', reminder2 = '', reminder3 = ''
  WHERE domain NOT IN ('".implode("','",$expiringDomains)."');
";

$sql = $mysqli->query($query);

使用准备好的语句,您可以执行以下操作:

<?php
$expiringDomains = array('dom1.com', 'dom2.com');

// Build a string of comma separated question marks (as many as there are domains)
$qm = substr(str_repeat(',?', count($expiringDomains)), 1);

$sth = $db->prepare("
    UPDATE customer_domains SET reminder1 = '', reminder2 = '', reminder3 = ''
    WHERE domain NOT IN($qm)
");

$sth->execute($expiringDomains);
?>

不要使用mysqli,如果你能避免的话,它只会让你头疼。改用PDO。比如:

$sth = $pdo->prepare(
    "UPDATE mytable SET foo=1 WHERE domain NOT IN(" .
    implode(", ", array_fill(0, count($expiringDomains), "?")) .
    ")"
);

$sth->execute($expiringDomains);

$result = $sth->fetchAll();

如果您真的想使用mysqli,您将使用类似的方法,但不是在
execute()
中提供数据,而是必须执行一个非常复杂的
bind\u param
调用(涉及
call\u user\u func\u array()
除非数组中的元素数量固定)或者循环执行几个
bind_param
调用。

其中域不在('dom1','dom2')
但这是在使用PDO-看起来OP在使用MySQLi。无法将数组作为参数传递给@JeffPuckettII实际上,我不知道除了旧的
MySQLi\u查询
等之外还有另一个MySQLi扩展。。。但无论如何,OP可以使用
bind_param()
在数组上循环以绑定它们中的每一个。
$sth = $pdo->prepare(
    "UPDATE mytable SET foo=1 WHERE domain NOT IN(" .
    implode(", ", array_fill(0, count($expiringDomains), "?")) .
    ")"
);

$sth->execute($expiringDomains);

$result = $sth->fetchAll();