【问题标题】:MySql query to get results based on timestampMySql 查询根据时间戳获取结果
【发布时间】:2020-07-20 15:40:38
【问题描述】:

在这里,我试图根据两个时间戳之间的差异来获取一些详细信息,即 有一个修改后的列存储时间戳,并且从另一个表创建的列也存储时间戳。 我需要的是时间戳(修改)和时间戳(当前时间)之间的时间戳(创建)。 请帮忙

错误号:1054

“where 子句”中的未知列“数组”

从创建 BETWEEN timestamp(Array) AND timestamp(CURRENT_TIMESTAMP()) 的广告系列中选择 *

文件名:models/Notification_model.php

行号:11

<?php
class Notification_model extends CI_Model 
{
    public function notifications()
    {
        $q1="select modified from influencer where influencerid=".$this->session->userdata('id')."";
        $query1 = $this->db->query($q1);
        $this->session->set_userdata('modified_time',$query1->result());

        $q="select * from campaigns where created BETWEEN timestamp(".$this->session->userdata('modified_time').") AND timestamp(CURRENT_TIMESTAMP())";
        $query = $this->db->query($q);

        if($query->num_rows()>0){
          return $query->result();
        }
    }
}
?>

【问题讨论】:

  • 如果你使用 var_dump($q) 它,你的 $q 变量看起来如何?
  • 我不知道 var_dump()
  • 它打印 $q 的值,以便您知道您的查询是否正确。只需将 var_dump($q) 放入您的代码中并查看/发布输出

标签: php mysql codeigniter session timestamp


【解决方案1】:

您的$query1-&gt;result() 正在返回一个数组,您应该取第一行和第一列 (updated):

$modified_time = $query1->result()[0][0];

此外,这样做是一个非常糟糕的主意,也是一个很大的安全问题:

$q1="select modified from influencer where influencerid=".$this->session->userdata('id')."";

您可能会被 SQL 注入攻击。例如,如果我将 ID 定义为: 1; UPDATE users SET is_admin = 1,SQL请求变为: select modified from influencer where influencerid=1; UPDATE users SET is_admin = 1,我是您系统的管理员。

您应该准备好您的陈述以防止这种黑客攻击:

$query = $this->db->prepare("select modified from influencer where influencerid = :id");
$query->bindParam(':id', $this->session->userdata('id'));
$query->execute();

更多信息在这里:https://www.php.net/manual/en/pdo.prepared-statements.php

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多