我需要使用像这样的代码来操作mySQL表中的条目
foreach($items as $item)
{
$sql = "UPDATE `siteims` SET refs = refs + 1 WHERE imid = '{$item->img}';";
$sql .= "UPDATE `lists` SET refs = refs + 1 WHERE lid = '{$item->lili}'";
$dbh->exec($sql);
}
$ item中可能有多达50个项目。此代码的变体是
foreach($items as $item)
{
if ('z' != $img->img)
$sql = "UPDATE `siteims` SET refs = refs + 1 WHERE imid = '{$item->img}';";
if ('z' != $item->lili)
$sql .= "UPDATE `lists` SET refs = refs + 1 WHERE lid = '{$item->lili}'";
$dbh->exec($sql);
}
在这两种情况下,我都在为$ items中的EACH项执行一系列SQL语句。我的问题
我非常感谢任何帮助。
答案 0 :(得分:3)
您可以使用in
子句,例如
$sql = "UPDATE .... WHERE imid IN (" . implode($array_that_has_the_ids) . ")"
并将您自己简化为一个SQL查询。但是,如果您尝试使用巨大的aray,则可能会失败 - 生成的查询可能会超出max_allowed_packet设置并被杀死。
至于你的strlen ......将strlen结果与'z'
进行比较有什么意义? strlen返回一个整数,你也可以改为if (apple == orange)
。
答案 1 :(得分:1)
首先,我建议您使用IN子句,只有2个单独的查询... 你可能要逃避那两个元素$ item-> img和$ item-> lili ..
$ids = array("siteims"=>array(), "lists"=>array());
foreach($items as $item)
{
$ids['siteims'][] = "'" . $item->img . "'";
$ids['lists'][] = "'" . $item->lili . "'" ;
}
if(!empty($ids['siteims'])){
$sql = "UPDATE `siteims` SET refs = refs + 1 WHERE imid IN (".implode(',', $ids["siteims"]).")";
$dbh->exec($sql);
}
if(!empty($ids['lists'])){
$sql = "UPDATE `lists` SET refs = refs + 1 WHERE lid IN (".implode(',', $ids["lists"]).")";
$dbh->exec($sql);
}