Codeigniter成本函数 - 没有错误,但没有计算
我收到这个函数内置codeigniter没有SQL错误,但我试图计算作为参数传递的两个表单输入之间的区域差异。任何人都可以看到这个功能的问题?Codeigniter成本函数 - 没有错误,但没有计算
function stationcost($station1,$station2)
{
$data = array();
$this->db->select('station_zone.Zone-sz2.Zone AS Zone' , false)->from('station_zone')->join('station_zone AS sz2','sz2.Station', $station2)->where('station_zone.Station',$station1);
$Q = $this->db->get();
$this->db->select('Cost')->from('zone_cost')->where('Zone_Diff', $Q->row()->Zone_Diff);
$query = $this->db->get();
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
$data = $row->Cost;
return $data;
}
}
}
非常感谢,
-
确保您的查询
$this->db->select('station_zone.Zone-sz2.Zone AS Zone' , false) ->from('station_zone') ->join('station_zone AS sz2','sz2.Station', $station2) ->where('station_zone.Station',$station1); $Q = $this->db->get();
实际返回的东西。首先尝试在phpMyAdmin或类似工具,例如,或者手工打造,并将其传递给
$this->db->query($sql)
方法例如而且,你正在构建的join()方法错了,mightbe:
join('station_zone As sz2','sz2.Station = '.$station2)
我想想,不清楚$ station2来自哪里以及你想要加入哪个表... join()中的第三个参数应该是连接类型,就像“left”一样。恩。请参阅docs
即使select()部分看起来很尴尬,我看到有三个点在那里您是否尝试运行
$this->db->last_query();
以查看查询字符串的外观?
我真的不能弄明白为止...... -
在这第二个查询:
$this->db->select('Cost') ->from('zone_cost') ->where('Zone_Diff', $Q->row()->Zone_Diff);
你问一个
$Q->row()->Zone_Diff
,我看不出哪里是牵强......不是在前面的查询,似乎 -
最后,在这里:
if ($query->num_rows() > 0) { foreach ($query->result() as $row) { $data = $row->Cost; return $data; } }
您正在覆盖循环中的$ data变量...不,您刚刚在第一次通过后返回!你应该做的:
foreach ($query->result() as $row)
{
$data[] = $row->Cost;
}
return $data;
UPDATE:
你说你的查询在phpMyAdmin的工作,那么为什么不只是在做:
$sql = "SELECT station_zone.Zone-sz2.Zone AS Zone FROM station_zone JOIN station_zone AS sz2 ON sz2.Station=? WHERE station_zone.Station=?";
$Q = $this->db->query($sql, array($station1,$station2));
,看看是否可行?有时,当您需要开始避免标识符保护等时,AR会使事情更加复杂。像上面这样的查询对于注入来说仍然是安全的,因为使用查询绑定,并且比使用AR构建容易10倍。
Withouth看到数据库模式,我stil发现它有雾,理解为什么JOIN和为什么只能在一个表和本身作为别名操作...但我在一天的错误时间(晚上和今天早上:)回答),所以它可能就是我。哪些是表格,它们是如何构成的?
选择 station_zone.Zone-sz2.Zone AS 区与station_zone JOIN station_zone AS SZ2 ON sz2.Station =( 'STATION1') WHERE station_zone.Station =( '站2')在phpMyAdmin工作 – Jon 2012-01-12 23:12:53
$ STATION1来自在控制器中形成输入并作为变量传递。 – Jon 2012-01-12 23:18:00
该选择是尴尬的,因为它试图从$ station2 - $ station1减去区域,同时首先在zone_cost表中找到区域差异... – Jon 2012-01-12 23:18:58
你的问题是在你的IF和foreach语句......你需要使用array_push,因为它被定义为一个阵列添加到您的$ data变量。此外,你的返回语句打破了功能。意思是你的foreach只运行一次。您需要将您的返回语句移到foreach语句之外,以便只在foreach语句完成后才等待返回$ data。
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
array_push($data,$row->Cost);
}
return $data;
}
您可以验证此语句:$ Q-> row() - > Zone_Diff是否返回内容? – 2012-01-12 20:31:18