【问题标题】:Query using CodeIgniter's Active Record not returning a value…使用 CodeIgniter 的 Active Record 查询不返回值……
【发布时间】:2011-12-22 21:10:29
【问题描述】:

这是我正在运行的代码。

$query = $this->db->query("DECLARE @tmp TABLE (ContactID UNIQUEIDENTIFIER)
INSERT INTO tblCD (" . ArrayToString($fieldsCDArray) . ")
OUTPUT Inserted.ContactID INTO @tmp
VALUES (" . ArrayToDBString($valuesCDArray) . ")
INSERT INTO tblCCO (ContactID, " . ArrayToString($fieldsCCOArray) . ")
VALUES ((SELECT ContactID FROM @tmp), " . ArrayToDBString($valuesCCOArray) . ")
SELECT ContactID FROM @tmp");

$result = $query->row(); 

我已经运行 $this->db->last_query() 来验证 SQL 代码在 SQL Server 中是否确实有效。正如预期的那样,它最终返回一行。但是上面的代码没有从 CodeIgniter 返回任何东西。我也尝试过使用 result() 和 result_array() 来运行它,但仍然没有。

CodeIgniter 不喜欢从包含多个语句的查询中返回结果,还是我必须以不同的方式获得结果? (对于任何询问的人,我只是想获取最后插入的 id,但它是一个 GUID,所以我不能使用 $this->db->insert_id()。

任何帮助或建议将不胜感激。谢谢。

另外,忽略 ArrayToDBString() 方法,这些绝对不是问题,因为就像我说的那样,我已经打印了最后一个查询并成功地通过 SQL 运行它。此外,我通过 SQL 运行它时得到的结果是一个名为 ContactID 的列。

【问题讨论】:

  • 您如何验证没有返回任何内容?这段代码原样不会有任何输出。如果您不确定是否是查询本身导致了问题,您是否使用更简单的查询进行了测试?您在这里似乎有几个问题,您一次尝试一个吗?
  • 我在呼应 $result 并且它什么也没显示。我还做了一个 $this->db->last_query() 来提取 SQL,然后直接在 Management Studio 中运行它并验证它在那里返回结果。
  • var_dump() 代替它。如果为 FALSE,则 echo 不会显示它。一步一步来,先看看代码是否有效,再看看为什么没有结果
  • 正如我在下面的答案中提到的,我也尝试了 print_r() 并得到了一个空数组。

标签: php codeigniter


【解决方案1】:

我正在回复 $result,但它什么也没显示

row() 返回一个对象,而不是一个字符串,即使您只选择了一列。要访问该值,您仍然必须显式调用它:

$record = $query->row();
echo $record->ContactID;

如果这仍然不起作用,请尝试一次运行一个查询,而不是一次将所有查询传递给 $this->db->query()

...和往常一样,使用error_reporting(E_ALL) 打开错误报告并使用var_dump()print_r() 之类的东西来调试变量,而不是echo

【讨论】:

  • 应该更清楚一点。我也尝试了 print_r() ,它只是显示了一个空数组。
  • 这很奇怪,它至少应该是一个对象,而不是一个数组。你确定你使用的是row()?单独运行查询呢,发生了什么?当您尝试另一个更简单的查询(例如 select * from tblCD)时发生了什么?
  • 它可能是一个对象。我知道有一次我也用 result 和 array_result 尝试过,所以我可以从中看到空数组,这就是我提到它的原因。像选择这样的简单查询就可以了。我到处都在用,没问题。我想知道 $query() 是否只是不喜欢从更复杂的查询或其他东西返回结果。
  • 这就是为什么我一直建议您尝试将其拆分为多个 query() 调用。我弄错了吗,这实际上是一个查询而不是 5 个查询?在第一个查询完成后(不确定)没有返回任何内容很可能是 CI 的“错误”。我们是否知道查询的任何部分是否正在运行?
  • 两个插入运行。查询只是不返回我的选择。如果我将它分成两个查询,我的临时表会不会超出范围? (原谅我不知道,我不经常使用临时表。)
猜你喜欢
  • 2013-02-22
  • 2012-04-17
  • 2013-02-22
  • 2011-10-22
  • 1970-01-01
  • 2016-03-15
  • 2013-01-09
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多