Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示选择计数结果-错误:预期字符串,给定对象_Php_Postgresql_Codeigniter - Fatal编程技术网

Php 显示选择计数结果-错误:预期字符串,给定对象

Php 显示选择计数结果-错误:预期字符串,给定对象,php,postgresql,codeigniter,Php,Postgresql,Codeigniter,在我的项目(Codeigniter-MVC.Database:Postgres)中,我需要在视图中显示查询结果。但它返回错误: 遇到一个PHP错误 严重性:警告 消息:preg_match()期望参数2为字符串,对象为给定的 文件名:database/DB_driver.php 电话号码:622 我的看法是: $date1 = date('Y-m-d'); $date2 = date('Y-m-d', strtotime($date1. ' +30 day')); $total_days =

在我的项目(Codeigniter-MVC.Database:Postgres)中,我需要在视图中显示查询结果。但它返回错误:

遇到一个PHP错误 严重性:警告 消息:preg_match()期望参数2为字符串,对象为给定的 文件名:database/DB_driver.php 电话号码:622

我的看法是:

$date1 = date('Y-m-d');
$date2 = date('Y-m-d', strtotime($date1. ' +30 day'));  
$total_days = $this->sac->holidays($date1,$date2);
echo $total_days;
我的模型:

public function holidays($date1,$date2)
  {
    $query = $this->db->query("SELECT COUNT (*) FROM table_holidays WHERE date_row between '".$date1."' AND  '".$date2."';");
    $return = $this->db->query($query);
    $result = $return->result();
     return json_encode($return->result()); 
   }
DB_driver.php

620 function is_write_type($sql)
621 {
622     if ( ! preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD DATA|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK)\s+/i', $sql))
623     {
624         return FALSE;
625     }
626     return TRUE;
627 }
有人能帮我吗? 谢谢大家!

您可以尝试:

型号:

public function holidays($date1,$date2)
  {
    $query = $this->db->query("SELECT COUNT (*) FROM table_holidays WHERE date_row between '".$date1."' AND  '".$date2."';");
    echo $query->num_fields(); 
   }
视图:


但正如达曼所说,您对SQL注入是开放的。您应该使用参数化的预处理语句。

要编写一个SQL注入安全的查询,请使用查询绑定,如下所示并解释。通过将用于
COUNT
的列限制为一(而不是所有列,即*),这也稍微优化了查询,并且还确保它检查空结果集,并在这种情况下返回零计数

public function holidays($date1,$date2)
{
    $sql = "SELECT COUNT(startdate) as count FROM events WHERE startdate between ? AND ?";
    $query = $this->db->query($sql, [$date1, $date2]);
    $row = $query->row();

    $count = ! empty($row) ? $row->count : 0; //$count=$row->count if $row is not empty, else $count=0 
    return json_encode($count);
}

您正在将查询结果返回到
$query
,然后尝试对结果运行查询。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何类型的输入,尤其是来自客户端的输入。即使您的查询仅由受信任的用户执行,。如果您使用CodeIgniter,那么为什么将SQL语句错误地准备为字符串?如果不使用框架,那么拥有框架的目的是什么?
public function holidays($date1,$date2)
{
    $sql = "SELECT COUNT(startdate) as count FROM events WHERE startdate between ? AND ?";
    $query = $this->db->query($sql, [$date1, $date2]);
    $row = $query->row();

    $count = ! empty($row) ? $row->count : 0; //$count=$row->count if $row is not empty, else $count=0 
    return json_encode($count);
}