2016-08-17 88 views
0

我正在使用PDO做一些基本的登录注册表单,但无法在数据库中插入数据时我var_dump()$查询,我看到没有值将不会执行在$ query->执行语句。看下面什么时发现我var_dump($查询);PDO准备声明不能用数据替换占位符

**

对象(PDOStatement对象)#4(1){[ “的queryString”] =>串(92)“INSERT INTO 用户(用户名,密码,名称,电子邮件,网站)VALUES (?,?,?,?,?)”}这里登录

**

注册successfull.Click我遇到过这个问题,并尝试几乎所有的东西,我知道。请参阅代码帮助我找到问题。

数据库格式像 数据库名称:oopreg 表名:用户

id   int(11)  primary auto_increment 
username varchar(30) 
password varchar(30) 
name  varchar(50) 
email  varchar(100) 
website  varchar(100) 

的config.php

<?php 
class databaseConnection{ 

    public function __construct(){ 
     GLOBAL $pdo; 
     try{ 
    $pdo = new PDO('mysql:host:localhost;dbname=oopreg','root',''); 
    echo "Connected"; 
     }catch(PDOException $e){ 

      echo "DataBase connection Error"; 

     } 
    } 

} 

的functions.php

<?php 

require 'config.php'; 

    class loginRegistration{ 

     function __construct(){ 
     $database = new databaseConnection(); 
     } 
    public function registerUser($username,$password,$name,$email,$website){ 
     global $pdo; 
     $query= $pdo->prepare("SELECT id FROM users WHERE username=? AND email=?"); 
     $query->execute(array($username,$email)); 
     $num= $query->rowCount(); 
     if($num==0){ 
      $query= $pdo->prepare("INSERT INTO users(username,password,name,email,website) VALUES 
       (?,?,?,?,?)"); 
      $query->execute(array($username,$password,$name,$email,$website)); 
     var_dump($query); 
     return true; 

     }else{ 
      print "<span style='color:red'>Error...Username/Email alreay exists</span>"; 
     } 
    } 

    } 


    ?> 

register.php

<?php 

require_once "functions.php"; 
$user= new loginRegistration(); 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Registration Page</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
<div class="wrapper"> 
    <div class="header"> 
     <h3>PHP OOP Login Register System</h3> 
    </div><!--End header Section--> 
    <div class="mainmenu"> 
     <ul> 
      <li><a href="index.php">Home</a></li> 
      <li><a href="profile.php">Show Profile</a></li> 
      <li><a href="changePassword.php">Change Password</a></li> 
      <li><a href="logout.php">Logout</a></li> 
      <li><a href="login.php">Login</a></li> 
      <li><a href="register.php">Register</a></li> 
     </ul> 
    </div><!--End Manin menu section--> 

    <div class="content"> 
     <h2>Register</h2> 

    <p class="msg"> 

     <!--PHP area start--> 
     <?php 
     if ($_SERVER['REQUEST_METHOD']=='POST') { 
      $username=$_POST['username']; 
      $password=$_POST['password']; 
      $name=$_POST['name']; 
      $email=$_POST['email']; 
      $website=$_POST['website']; 

      if(empty($username) or empty($password) or empty($name) or empty($email) or empty($website)) { 

       echo "<span style='color:red;'> Field must not be empty</span>"; 
      }else{ 
       $password=md5($password); 
       $register=$user->registerUser($username,$password,$name,$email,$website); 
       if($register){ 
       echo "<span style='color:green'>Registration successfull.<a href='login.php'>Click here</a> for login</span>"; 
       }else{ 
       echo "<span style='color:red'>UserName or email already exists</span>"; 
       } 
      } 

     } 
     ?> 
     </p> 
    <div class="login_reg"> 
     <form action="" method="post"> 
      <table> 
       <tr> 
        <td>Username:</td> 
        <td><input type="text" name="username" placeholder="Enter your username..."/></td> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td><input type="password" name="password" placeholder="Enter your password..."/></td> 
       </tr> 
       <tr> 
        <td>Name:</td> 
        <td><input type="text" name="name" placeholder="Enter your name..."/></td> 
       </tr> 
       <tr> 
        <td>Email:</td> 
        <td><input type="email" name="email" placeholder="Enter your email..."/></td> 
       </tr> 
       <tr> 
        <td>Website:</td> 
        <td><input type="text" name="website" placeholder="Enter your website..."/></td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <input type="reset" name="" value="Reset"/> 
         <input type="submit" name="register" value="Register"/> 

        </td> 
       </tr> 
      </table> 
     </form> 
     <?php //var_dump($_POST); ?> 
    </div><!--End Login_reg page--> 
    <div class="back"> 
     <a href="">Back</a> 

    </div> 
    </div><!--End Content section--> 
    <div class="footer"> 
     <h3>Training with live project</h3> 
    </div> 

</div><!--End Wrapper section--> 
</body> 
</html> 
+0

要调试PDO语句,然后有一些有用的建议:[如何调试PDO数据库查询?](http://stackoverflow.com/questions/2411182/how-to-debug-pdo-database-queries)。对于mysql,这很有用:[如何以及何时启用MySQL日志](http://www.pontikis.net/blog/how-and-when-to-enable-mysql-logs)。我使用'在运行时启用日志'选项。 –

回答

0

我看不出值不会在执行查询 - $>执行。见下面什么时候发现我的var_dump($查询)语句;

没关系,PDO以这种方式工作。它不会用queryString属性中的实际数据替代问号。

要看到什么是您所查询的不工作,你必须配置PDO正确,在我的文章解释了真正的原因,PDO tutorial. Connecting. DSN

public function __construct(){ 
    $opt = [ 
     PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
     PDO::ATTR_EMULATE_PREPARES => false, 
    ]; 
    $pdo = new PDO('mysql:host:localhost;dbname=oopreg','root','', $opt); 

后,在错误时的情况下将被报告给你。