0

我已经设置了一个函数,它使用插入语句将用户注册到站点中,然后另一个语句检查电子邮件是否已经存在于数据库中。

问题在于尝试将用户数据放入数据库的插入语句...浏览器输出可捕获的致命错误:类 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;
 }
4

2 回答 2

1

检查or die($connection);。然后检查exit的文档(die是 的别名exit)。它接收一个字符串(或 int)参数,然后向它发送一个对象。

因此,它失败了。

于 2013-09-02T17:44:51.947 回答
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;
} 

这部分代码永远不会执行。

于 2013-09-02T17:43:20.860 回答