【问题标题】:Is it possible that a SELECT query is inserting data in Joomla DB?SELECT 查询是否有可能在 Joomla DB 中插入数据?
【发布时间】:2013-11-12 07:15:59
【问题描述】:

我需要检查一个值是否在数据库中。我正在使用

$db = JFactory::getDBO();
$query = $db->getQuery( true );

$query->select($db->quoteName('id'));
$query->from($db->quoteName('#__tablename'));
$query->where($db->quoteName('fieldname') . ' = ' . $db->quoteName($valuetocheck));
$db->setQuery($query);
$id = $db->loadResult();

echo "value = " . $id;

if($id) {/*action if the value already exists*/} else {/*...*/}

问题是我设置为$valuetocheck 的每个新值实际上都被插入到表中。如果我设置了一个尚不存在的值,它会被插入,所以我总是得到一个有效的$id,并且无法继续到else {}

这可能吗?是否有任何解决方法来检查一个值是否已经在里面?

【问题讨论】:

  • 尝试在$db->setQuery($query);这一行之前打印$query,看看你会得到什么。如果是选择查询,那么它肯定不会插入数据。
  • 查询将插入任何值,并且您专门使用了select。值可能正在被另一个查询插入某处

标签: php mysql select joomla joomla2.5


【解决方案1】:

试试这个,

SELECT 查询永远不会向 DB 插入任何值 如果数据插入到表中,则它应该在其他位置。此外,您可以检查numrows,而不是检查$id 值,如下所示。

$db = JFactory::getDBO();
$query = $db->getQuery( true );

$query->select($db->quoteName('id'));
$query->from($db->quoteName('#__tablename'));
$query->where($db->quoteName('fieldname') . ' = ' . $db->quoteName($valuetocheck));
$db->setQuery($query);
$db->query();
if($db->getNumRows() >0){
 //Data found
}
else{
 //Nod Data found
}

希望对你有帮助..

【讨论】:

  • 似乎使用$db->getNumRows() 效果更好。无论如何,我收到一个警告,因为它缺少一个论点,但这并不重要。还有一件事,$db->quoteName 诡异的转义邮件,把 user@host.com 变成了'user@host'.'com'……邮件还有其他的报价方式吗?
  • 尝试 $db->e​​scape() 而不是 $db->quoteName(),警告你可能错过了 $db->query();设置查询后。
【解决方案2】:

不,这是不可能的。 db 对象是否有可能在下面的代码中以不同方式重用?

  1. 尝试在您向我们展示的代码之前添加die('test 1');,然后运行以确保您自己不会更改表。不要介意该网站没有显示任何内容。

  2. 然后将 die-command 移动到 echo-command 之后并再次运行。在我看来,valuetocheck 在这个阶段没有办法进入表格。检查!

  3. 插入 valuetocheck 后继续测试..

祝你好运!

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多