【发布时间】:2021-09-02 01:48:49
【问题描述】:
我目前是 php 新手,我认为这是问的正确地方。 当我试图回显 $empshift 变量时。它在浏览器控制台中显示
("SELECT SHIFT_START FROM mylogin_46.DATE_TIME_RECORDS WHERE ID = '' 和 r_status = 'A'")。
如您所见,它返回字符串或查询本身,而不是查询的实际值。
我该怎么做才能让$empshift 真正返回查询的值(例如:在数据库中SHIFT_START 列是时间数据类型-> 08:30:00 在这种格式中。)。
我想这就是我不能将$empshift 减去$alterin 的原因。
foreach ($rs as $key => $value) {
$db = new Database();
$db->connect();
date_default_timezone_set('Asia/Ho_Chi_Minh');
$empshift = $db->select(array('myilogin_46.DATE_TIME_RECORDS'),'SHIFT_START',"ID = '".$id."' and r_status = 'A'");
echo $empshift; //SELECT SHIFT_START FROM myilogin_46.DATE_TIME_RECORDS WHERE ID = '' and r_status = 'A'<br />
$sched = $empshift;
$alterin = date('H:i:s',strtotime($value['alterIN']));//
echo $alterin;//08:33
echo $sched;
$late = $alterin-$sched;
$db->update_imp('myilogin_46.DATE_TIME_RECORDS',array(
'date_in'=>date('Y-m-d',strtotime($value['alterIN']))
,'time_in_info'=>'ALTERED IN'
,'time_out_info'=>'ALTERED OUT'
,'time_in'=>date('H:i',strtotime($value['alterIN']))
,'time_out'=>date('H:i',strtotime($value['alterOUT']))
,'date_out'=>date('Y-m-d',strtotime($value['alterOUT']))
,'late'=>$late
),"id = '".$value['dtrID']."' and id_emp = '".$value['empID']."' and R_STATUS = 'A'");
// echo date('H:i:s',strtotime($late));
$db->disconnect();
这是Database类中的select()函数:
public function select($table = array(), $column = '*', $where = null, $order = null, $limit = null){
$qry = 'SELECT '.$column.' FROM '.implode(', ',$table);
if($where != null){
$qry .= ' WHERE '.$where;
}
if($order != null){
$qry .= ' ORDER BY '.$order;
}
if($limit != null){
$qry .= ' LIMIT '.$limit;
}
// echo $qry.'</br></br>';
// exit();
if ($this->sql($qry)) {
return $qry;
} else {
echo 'dbselect sql error: '.$qry;
exit();
}
}
【问题讨论】:
-
大概你的
$db->select函数返回的是生成的SQL而不是查询结果。但由于我们看不到该函数的代码,我们无法告诉您为什么会这样,或者下一步该做什么。 -
我更新了,我已经包含了 select() 函数
-
谢谢。同样,我们不知道
$this->sql做了什么,但似乎如果查询成功,则选择函数会返回生成的SQL 的副本。我不得不说这似乎不是很有用(如果出现错误,将其作为调试工具返回会更有用),这似乎是一个设计缺陷 - 除非该类为您提供了其他一些访问方式到 SELECT 查询的结果。 -
没有看到
sql()很难说,但也许select()方法只应该生成SQL,然后应该对DB实际执行?