0

我有一个脚本可以将新用户注册到数据库中,并且工作正常 - 用户确实被放入了数据库。但是,变量 $success 不会更改为 1(即使它应该更改为 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 语句不应该返回任何东西,所以这有点奇怪。

4

7 回答 7

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;
}
于 2013-08-22T18:40:29.230 回答
0

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

于 2013-08-22T18:37:26.107 回答
0

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

解决方案之一是调用“插入”函数而不是查询函数。这应该返回正确的结果。

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

于 2013-08-22T18:41:24.513 回答
0

检查您用于将数据插入数据库表的类手册。

$this->db->query()

并检查上述函数返回的值。上述功能可以更好地回答您的问题。

于 2013-08-22T18:38:09.780 回答
0

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

于 2013-08-22T18:38:45.323 回答
0

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

于 2013-08-22T18:38:59.020 回答
0

好吧,在四处挖掘并询问了几个同事之后,我发现在我之前从事此工作的人为 SQLite3 数据库编写了一个包装类,它使用与 PHP 内置的几乎完全相同的语法 - 相同的函数名称,参数和一切。评论中甚至有一个链接指向 PHP 网站详细介绍 SQLite3。我已经从这里弄明白了,谢谢大家的建议。

于 2013-08-22T19:14:54.720 回答