更新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();