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 charactersStrings 中的所有其他内容的代码

$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 查询

具有限制和偏移量的 CodeIgniter sql 查询未显示结果

使用mysql中的select语句替换sql中的空值?

在 CodeIgniter 中防止 SQL 注入的最佳方法是啥 [重复]

MySQL中的空IN子句参数列表