Joomla 3 MySQLi删除查询语法


Joomla 3 MySQLi delete query syntax

我正在编写Joomla 3组件内的脚本,需要mysqli删除查询,但它不起作用。也没有错误…它似乎没什么用。我有:

$query = $db->getQuery(true);
$conditions = array(
  $db->quoteName('id') . ' = 50',
  $db->quoteName('id') . ' = 54',
  $db->quoteName('id') . ' = 73',
  $db->quoteName('id') . ' = 86',
  $db->quoteName('id') . ' = 92'
);
$query->delete($db->quoteName('#__menu'))->where($conditions);
$db->setQuery($query);
$result = $db->query();

$conditions数组比这长得多,但我在本文中缩短了它。我假设我的查询缺少一些东西,但我找不到任何地方显示我在这里做什么。同样的设置也适用于其他查询,只是这个delete查询不行。谢谢!

解析的SQL是id=50 AND id=54 AND id=73 -当然没有记录具有与之匹配的ID。你会想要id=50 OR id=54 OR id=73....

可能有一种更"Joomla正确"的方法,但他会给你正确的WHERE子句:

$query->where('`id` IN (50,54,73,86,92)';

不确定您是否已经这样做了,但您似乎没有定义$db。请看下面的代码:

$db = JFactory::getDbo();

除此之外,您正在使用变量$results定义$db->query(),但似乎没有调用它。我还建议将query替换为execute,因为它已被弃用。

那么下面就是你的最终代码:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array(
  $db->quoteName('id') . ' = ' . $db->quote('50'),
  $db->quoteName('id') . ' = ' . $db->quote('54'),
  $db->quoteName('id') . ' = ' . $db->quote('73'),
  $db->quoteName('id') . ' = ' . $db->quote('86'),
  $db->quoteName('id') . ' = ' . $db->quote('92')
);
$query->delete($db->quoteName('#__menu'))
      ->where($conditions);
$db->setQuery($query);
$db->execute();