我已经设置了一个函数,它使用insert语句将用户注册到站点中 - 之前另一个语句检查数据库中是否已存在该电子邮件。
问题在于insert语句试图将用户数据放入DB ...浏览器输出捕获致命错误:类mysqli的对象无法转换为字符串...
我真的不明白是什么问题.Result1是出现错误的查询。 从语法的角度来看,我没有错。 我尝试了很多,但我找不到问题。通常这些错误出现在SELECT语句中。 这是代码:
function register_enduser($post,$connection)
{ global $errorclass;
$name = $connection->real_escape_string($post['name']);
$lastname = $connection->real_escape_string($post['lastname']);
$email = $connection->real_escape_string($post['e-mail']);
$pass_hashed = password::hash($_POST['password']);
$passwd = $pass_hashed;
$usertype= $_POST['usertype'];
$connection->set_charset("utf8");
$result = $connection->query("select * from users where email='".$email."'");
if (!$result) {
throw new Exception('error');
return false;
}
elseif ($result->num_rows > 0) {
$errorclass['existentemail'] = ' e-mail allready exists.';
return $errorclass['existentemail'];
} else {
$result1 = $connection->query("insert into users values
(NULL,'".$name."','".$lastname."','"
.$email."','".$passwd."','".$pass_hashed."','".$usertype."')")or die($connection);
}
if (!$result1) {
throw new Exception('error.');
return false;
}
return true;
}
答案 0 :(得分:1)
检查or die($connection);
。然后查看exit的文档(die
是exit
的别名)。它接收一个字符串(或int)参数,然后向它发送一个对象。
因此,它失败了。
答案 1 :(得分:0)
您的查询:
$result1 = $connection->query("insert into users values
(NULL,'".$name."','".$lastname."','"
.$email."','".$passwd."','".$pass_hashed."','".$usertype."')")
显然失败并且die($connection)
部分语句被执行导致所述可捕获错误,以下是如何解决它:
$sql = "INSERT INTO users VALUE
(NULL, '".$name."', '".$lastname."', '".$email."', '".$passwd."', '".$pass_hashed."', '".$usertype."')";
$result1 = $connection->query($sql) or die($connection->error); // notice "->error"
收到SQL错误消息后,您将能够继续对您的查询进行调试。
此外,如果您在or die(...)
的同一语句中使用$connection->query(...)
,则此代码毫无意义:
if (!$result1) {
throw new Exception('error.');
return false;
}
这部分代码永远不会执行。