PHP变量在成功运行后未被分配

时间:2013-08-22 18:30:10

标签: php variable-assignment

我有一个脚本将新用户注册到数据库中,并且工作正常 - 用户确实被放入数据库。但是,变量$ success不会更改为1(即使它应该是,因为查询成功)。每次调用此函数时,它都会返回$ success的值为0。 我唯一能想到的是查询是否运行正常,但返回FALSE。但是,当用正确的信息更新表时,这真的没有多大意义?

  public function register($email, $password, $firstname, $lastname, $employee_number) {
                  //Lets us know if we registered properly or not
                  $success = 0;
                  //Salt and encrypt the password
                  $salt = generateSalt($password);
                  $encypted_password = generatePassword($salt, $password);
                  if(isset($this->db)) {
                          if($this->db->query("INSERT INTO users (email, encrypted_password, salt, first_name, last_name, employee_number) VALUES('$email', '$encypted_password', '$salt', '$firstname', '$lastname', '$employee_number');")) {
                                  $success = 1;
                          }

                  }       
                  $arr = array("success" => $success);
                  return json_encode($arr);   
          }
编辑:我知道我忘了提一下,这是使用SQLite3。根据文档(http://www.php.net/manual/en/sqlite3.query.php),如果查询返回结果,它将返回一个SQLite3Object。但是,如果它不返回结果,它应该在查询成功时返回TRUE,如果查询失败则返回FALSE。 仔细检查语句的var_dump,我回到NULL。最后我知道,INSERT语句不应该返回任何内容,所以这有点奇怪。

7 个答案:

答案 0 :(得分:1)

也许尝试将值赋给变量然后检查变量值。如果没有别的你可以var_dump()变量,看看函数输出什么。

public function register($email, $password, $firstname, $lastname, $employee_number) {
                  //Lets us know if we registered properly or not
                  $success = 0;
                  //Salt and encrypt the password
                  $salt = generateSalt($password);
                  $encypted_password = generatePassword($salt, $password);
                  if(isset($this->db)) {
                          $query = $this->db->query("INSERT INTO users (email, encrypted_password, salt, first_name, last_name, employee_number) VALUES('$email', '$encypted_password', '$salt', '$firstname', '$lastname', '$employee_number');";
                          if($query === true)) {
                                  $success = 1;
                          }

                  }       
                  $arr = array("success" => $success);
                  return json_encode($arr);   
          }

编辑:因为您现在知道函数返回的内容。你总是可以把支票设置为

if($query !== false){
    $success = 1;
}

答案 1 :(得分:0)

你有没有在“$ success = 1;”之前/之后尝试回应?看看你是否真的进入了代码的那一部分?

答案 2 :(得分:0)

检查您正在使用的类的手动将数据插入数据库表。

$this->db->query()

并检查上述函数返回的值。上述功能可以为您提供更好的答案。

答案 3 :(得分:0)

这一切都取决于$ this-> db-> query()的返回值,如果没有代码或文档,这是不可能知道的。据我所知,query()可能不会返回任何内容。我会将query()的返回值保存到变量中,然后将其作为返回的一部分进行转储以进行调试。

答案 4 :(得分:0)

尝试将内部if语句更改为try / catch块。查看是否抛出异常。你可能会收到一个警告,所以即使它有效,它也不会达到设置$ success = 1的内部块。

答案 5 :(得分:0)

我们需要知道您使用的数据库classe。

其中一个解决方案是调用“插入”函数而不是查询函数。这应该会返回一个合适的结果。

另一个解决方案是进行另一个查询并尝试获取刚刚插入的数据。

答案 6 :(得分:0)

好吧,在挖掘并询问几位同事之后,我发现在我之前正在研究这个问题的人为SQLite3数据库编写了一个包装类,它使用与PHP内置的语法完全相同的语法 - 相同功能名称,参数和一切。评论中甚至还有一个链接导致PHP网站详细介绍了SQLite3。我已经从这里弄明白了,感谢大家的建议。