【问题标题】:How to use multi_query with DELETE / UPDATE only?如何仅将 multi_query 与 DELETE / UPDATE 一起使用?
【发布时间】:2012-08-28 16:26:56
【问题描述】:

当我在 SELECT 中使用 multi_query 时,它看起来像这样:

$sql = 'SELECT....';
$sql .= 'SELECT....';
...

if ($db->multi_query($sql))
{ 
    do
    {
        if ($stmt = $db->store_result())
        {
            while ($row = $stmt->fetch_assoc())
            {
                foreach ($row as $key => $value)
                {
                    $var[$key] = $value;
                }
            }
            $stmt->free_result();
        }
    } while ($db->more_results() && $db->next_result());
}

但是当我只需要 DELETE 或 UPDATE 时,它应该是什么样子,因为没有结果?

$sql = 'DELETE...';
$sql .= 'DELETE...';
$sql .= 'UPDATE...';

if ($db->multi_query($sql))
{
    do
    {
        /*well.. nothing?*/
    }
    while ($db->more_results() && $db->next_result());
}

即使没有do {...} 似乎也可以工作,但没有更好/更干净的解决方案吗?

【问题讨论】:

    标签: sql mysqli sql-delete multi-query


    【解决方案1】:

    据我所知,您执行多个更新的方法是正确的。您似乎错过的一件事是检查错误。例如(来自here),

    if ($db->multi_query($sql))
    {
      do
      {
      // do nothing, just iterate over results to make sure no errors  
      }
      while ($db->next_result());
    }
    if ($db->errno) {
        //error handling
    }
    

    【讨论】:

    • 你是对的,我应该检查错误..这也在我的改进列表中:) 但首先我试图删除不必要的代码,改进查询等,所以我来了空的do {...} while 循环是否正确的问题
    • 我想是的。否则,您无法检查批处理中的所有查询是否完成且没有错误(“如果第一个语句失败,则返回 FALSE。要从其他语句中检索后续错误,您必须首先调用 mysqli_next_result()。”- multi_query 文档)
    • 这是真的.. 但是这里需要do { ... } 部分吗? while ($db->more_results() && $db->next_result()); 似乎也只能工作,但看起来有点奇怪.. while ($db->more_results()) { $db->next_result(); } 相同.. 还是我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2022-08-17
    • 2017-12-06
    • 2012-07-10
    • 1970-01-01
    • 2012-05-06
    • 2020-10-30
    相关资源
    最近更新 更多