2017-05-16 149 views
-1

因此我在我的register.php页面上不断收到以下错误消息。我的托管服务提供商说,它的版本是由我一直试图从7.1下降到5.6,仍然是同样的事情。下面是不断出现的错误。类PDOStatement对象的与MySQL连接的问题

对象不能转换在/home/scylla97/public_html/register.php为int在线74

请参阅register.php页下面的代码。


  if ($securimage->check($_POST['captcha_code']) == false) { 
       echo '<font color="white">Wrong captcha :\ </font>'; 
     } 
     else { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $rpassword = $_POST['rpassword']; 
     $email = $_POST['email']; 
     $errors = array(); 
     $checkUsername = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username"); 
     $checkUsername -> execute(array(':username' => $username)); 
     $countUsername = $checkUsername -> fetchColumn(0); 
     if ($checkUsername > 0) 
     { 
      $errors['<font color="white">Username is already taken</font>']; 
     } 
     if (!ctype_alnum($username) || strlen($username) < 4 || strlen($username) > 15) 
     { 
      $errors[] = '<font color="white">Username Must Be Alphanumberic And 4-15 characters in length</font>'; 
     } 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) 
     { 
      $errors[] = '<font color="white">Email is invalid</font>'; 
     } 
     if (empty($username) || empty($password) || empty($rpassword) || empty($email)) 
     { 
      $errors[] = '<font color="white">Please fill in all fields</font>'; 
     } 
     if ($password != $rpassword) 
     { 
      $errors[] = '<font color="white">Passwords do not match</font>'; 
     } 
     if (empty($errors)) 
     { 
      try{ 
      $insertUser = $odb -> prepare("INSERT INTO `users` VALUES(NULL, :username, :password, :email, 0, 0, 0, 0)"); 
      $insertUser -> execute(array(':username' => $username, ':password' => SHA1($password), ':email' => $email)); 
      } 
      catch(PDOException $exception){ 
       return $exception->getMessage(); 
      } 
      echo '<div class="nNote nSuccess hideit"><p><strong><font color="white">SUCCESS: </font></strong><font color="white">User has been registered. Redirecting....</font></p></div><meta http-equiv="refresh" content="3;url=login.php">'; 
     } 
     else 
     { 
      echo '<div class="nNote nFailure hideit"><p><strong>ERROR:</strong><br />'; 
      foreach($errors as $error) 
      { 
       echo '-'.$error.'<br />'; 
      } 
      echo '</div>'; 
     } 
    } 
    } 
    ?> 

会很感激你的帮助:)

+0

哪里是线74? – nerdlyist

+1

'phpMyAdmin'是一个用PHP编写的用于维护MySQL数据库的工具。这不是一个数据库,你不要连接到它 – RiggsFolly

+0

这是2017年。不要这样做'SHA1($ password)' – Akintunde007

回答

0
$checkUsername = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username"); 
     $checkUsername -> execute(array(':username' => $username));//OOP 101 suggests that $checkUsername gets all functions/methods contained via the `$odb` variable 

$countUsername = $checkUsername -> fetchColumn(0);// use this variable in your if statements. 

$checkUsername仅仅是statement.It不能单独使用来检查count

更改您的如果条件为

if ($countUsername > 0) 
     { 
      $errors['<font color="white">Username is already taken</font>']; 
     } 
+0

谢谢,修正了:) – user3657631

+0

快乐@ user3657631 – Akintunde007

0

您比较一个PDOStatement$checkUsername一个整数(在这种情况下,你赤,如果它是大于0),而实际上,行计数存储在$countUsername,所以你需要对你的代码更改为:

if ($countUsername> 0) 
    { 
     $errors['<font color="white">Username is already taken</font>']; 
    } 

观测数据:不允许发表评论