codeigniter mysql中sql查询的空结果
Posted
技术标签:
【中文标题】codeigniter mysql中sql查询的空结果【英文标题】:Empty result from sql query in codeigniter mysql 【发布时间】:2015-08-13 01:21:59 【问题描述】:当我使用 $this->db->query($sql);
在 codeigniter 中执行 sql 查询时,它给了我一个空结果。但是当我直接从 mysql 执行相同的查询时,它会给我正确的结果。如果有人遇到过这个问题,请帮助我?
我在同一个项目中有更多的 sql 查询,并且工作正常。
查询 -
$sql = 'select r.no from routes r where r.id =
(select rp.route_id from routes_and_places rp where rp.place_id =
(select p.id from places p where p.name = \''.$place.'\'));';
当它执行时,我得到了print_r($sql);
的精确查询,我直接在 mysql 中执行它,它给了我预期的结果。
如果有人知道解决方案,请帮助
【问题讨论】:
删除查询中的一个分号(;)
我现在试过了。但没有任何改变。第一个分号用于查询第二个用于变量。我认为两个分号都不是错误
【参考方案1】:
我终于找到了解决方案。我从 google 地方 API 获取 $place
变量的值。因此,当我通过$this->db->last_query();
看不到位置时,它包含这些位置的CSS
标签。这意味着谷歌发送CSS
以突出显示带有地点的道路名称。在解决这个问题数小时后,我终于收到一个错误,提示语法不正确,它在where clause
中显示了一些CSS
代码,这意味着$place
也包含一些CSS
代码。所以我从字符串中删除了那些CSS
标签,现在它工作正常。
删除CSS tags/new line characters
和Strings
中的所有其他内容的代码
$text = strip_tags($step->html_instructions,"<style>"); // remove css from text
$substring = substr($text,strpos($text,"<style"),strpos($text,"</style>")+2);
$text = str_replace($substring,"",$text);
$text = str_replace(array("\t","\r","\n"),"",$text);
$text = trim($text);
【讨论】:
【参考方案2】:你传递的sql字符串有问题
$this->db->select('id');
$this->db->where('name',$place);
$sql1 = $this->db->get('places');
$sql1 = $sql1->row();
$this->db->select('route_id');
$this->db->where('place_id',$sql1->id);
$sql2 = $this->db->get('routes_and_places');
$sql2 = $sql2->row();
$this->db->where('id',$sql2->route_id);
$sql3 = $this->db->get('routes');
$sql3 = $sql3->result();
print_r($sql3);
一一打印所有结果并检查。 试试这个!
【讨论】:
你能通过 print_r($this->db->last_query()); 打印查询吗?并检查查询? 是的,我做到了,查询工作正常。我认为其他一些事情是错误的 如果此查询在 sql 中运行,那么您的 php 文件中应该没有任何问题,只需在 SQL 中运行此查询,而不是使用 phpmyadmin,您将获得生成 PHP 的选项并复制他们 PHP 并将其粘贴到 $sql 变量的前面,然后再试一次。 @RonakChauhan 您的查询有问题,因为您传递 $sql1= sql2->row 它应该是 $sql1=$sql1-row() 而不是在 where 子句中发送 sql 命令 $sql2你有 place_id , $sql1 它应该是 $sql1->id @imran 是的,我对其进行了更改【参考方案3】:直接打印print_r($sql);
不会为您提供结果。它只是 sql 查询,现在您必须执行它 并获得 结果。试试这个,
$sql = "select r.no from routes r where r.id =
(select rp.route_id from routes_and_places rp where rp.place_id =
(select p.id from places p where p.name = '".$place."'));";
$query = $this->db->query($sql);
$result = $query->result();
/* print query */
echo $this->db->last_query();
/* print results */
print_r($result);
【讨论】:
是的。我的意思是,我通过调用 print_r($sql); 得到了 $place 变量的实际值的确切查询。然后我用 $place 的值复制了该查询并直接在 mysql 中执行它给了我预期的结果。上面的代码与我的代码相同。但它给了我空的结果。 修改了您的查询。还可以尝试调试您的查询。检查查询是否正确生成。检查编辑。 我不明白为什么当我从 echo $this->db->last_query(); 获得查询时会发生这种情况;并复制它并直接在mysql中执行它所以它给了我答案但是通过 $this->db->query($sql);它给了我一个空的结果以上是关于codeigniter mysql中sql查询的空结果的主要内容,如果未能解决你的问题,请参考以下文章
Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常
具有限制和偏移量的 CodeIgniter sql 查询未显示结果