php - 显示 SELECT COUNT 结果 - 错误:需要字符串,给定对象
问题描述
在我的项目(Codeigniter - MVC。数据库: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 }
有人可以帮助我吗?谢谢!
解决方案
要编写不受 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);
}
推荐阅读
- scala - 将分钟转换为小时
- python - 确定元素是否已出现在流中的有效方法
- java - Tomcat 中的 Catalina LifeCycle 异常
- wix - 在 WiX 的下一次更新中删除组件
- php - PHP - 按索引排序数组
- wordpress - 如何在 wordpress 页面中设置 HTML 标签,用户只需要放置内容。?
- javascript - vue.js:在 HTML 中突出显示 javascript 数组中的新对象
- php - 使用 post/get 请求将数据从 python 发送到 php
- ibm-mq - 在 XMS 和非托管模式下设置 WMQ_CCDTURL 不起作用
- npm - if-else 在 npm 运行脚本中的参数