我在PHP框架COdeigniter中使用PDO驱动程序..
我有两个查询,一旦有人点击“提交”按钮,我必须运行。
一个是插入,下一个(问题查询)是更新。
这是我模型中的代码段:
function studenttime($anum) {
try {
$times = NULL;
$sql = "UPDATE student SET last_visit = :times WHERE anum = :anum";
$time = $this -> db -> conn_id -> prepare($sql);
$time -> bindParam(':times', $times);
$time -> bindParam(':anum', $anum);
$time -> execute();
if ($time -> rowCount() == 1) {
return $time;
}
} catch (PDOException $e) {
error_log($e -> getMessage());
die("An Error Occured, Contact System Admin - Err: SFM136");
}
}
这是我的控制者:
} else {
if ($session = $this -> staff_model -> session($anum, $why, $aidyear, $comments) && $time = $this -> staff_model -> studenttime($anum)) {
$this -> session -> unset_userdata('anum');
$this -> session -> unset_userdata('first');
$this -> session -> unset_userdata('last');
$this -> session -> unset_userdata('aidyear');
$this -> session -> unset_userdata('why');
$this -> session -> unset_userdata('comments');
redirect('staff_controller/studentlogin', 'location');
}
}
在我的模型中调用$ session = session的第一个查询工作得很好......
然后我尝试使用&&&&但似乎第二个甚至不影响if语句的结果。
我无法看到我在这里做错了什么,因为我的控制器上堆满了一堆这样的代码片段,所以我看不出这个特定的问题。
答案 0 :(得分:1)
由于运营商的优先权。
尝试运行此代码作为示例:
if ($a = 5 && $b = 6) {
var_dump($a); // Output: bool(true)
}
为什么呢?因为它与此相同:
if ($a = (5 && $b = 6)) {
var_dump($a); // Output: bool(true)
}
故事的道德:在if语句和类似语句中放置括号括号。
这应该更好:
if (($session = $this -> staff_model -> session($anum, $why, $aidyear, $comments)) && ($time = $this -> staff_model -> studenttime($anum))) {
我会建议你在if语句中避免多次赋值,因为这样做会让人感到困惑!
答案 1 :(得分:0)
对于您和将要阅读代码的任何其他人,您应该使您的if语句更易于阅读。另外,不要在if语句的中间为变量赋值,所有内容都应该在你到达那里时决定,只是因为编程语言可以处理if语句中的变量赋值并不意味着它会去以你认为他们的工作方式工作。
$a = $session = $this -> staff_model -> session($anum, $why, $aidyear, $comments);
$b = $time = $this -> staff_model -> studenttime($anum);
现在你可以做类似的事情。
if($a && $b)
{
//...
}
如果您真的想要取消设置所有活动的会话,那么您可以使用
session_destroy();
但如果你只想破坏一个子集,那么确定,按照你的方式去做。
我不知道我发布的$ a和$ b是否正确(从您复制/粘贴),但我的观点是,一旦您更好地构建代码,就会更容易解决问题。
答案 2 :(得分:0)
问题实际上是从我模型中的其他方法发生的:
function checkanum($anum) {
try {
$sql3 = "SELECT * FROM student WHERE anum = : anum";
$check = $this -> db -> conn_id -> prepare($sql3);
$check -> bindParam(':anum', $anum);
$check -> execute();
if ($check -> rowCount() == 1) {
return $check;
}
} catch (PDOException $e) {
error_log($e -> getMessage());
die("An Error Occured, Contact System Admin - Err: ST_M79");
}
}
它等于== 0,它应该是1.
我的控制器是检查记录是否已经存在,如果已经存在,那么只是更新它再次查询的时间。当我故意拼错if语句中的一个赋值时,我发现它,我注意到它没有给出错误,这给了我确定我的逻辑有缺陷所需的信息。现在一切都很完美。
感谢您的投入。而且我喜欢奥斯卡补充的补充:
这应该更好:
if(($ session = $ this - > staff_model - > session($ anum,$ why,$ aidyear, $评论))&& ($ time = $ this - > staff_model - > studenttime($ anum))){
我建议你避免if语句中的多个赋值 那只是因为,这很令人困惑!
很有意义。 1