使用PDO时没有数据库选择错误


No database selected error using PDO

我正在尝试使用PDO连接到我的数据库,但我有这个错误:没有选择数据库

我正在阅读如何使用这里http://www.php.net/manual/en/book.pdo.php,我认为一切都是正确的。

用旧的方法,一切都很好,但是用PDO我有这个错误。

有PDO经验的人知道我做错了什么吗?

老方法:

<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','db_name');
$connect = mysql_connect(HOST,USER,PASS) or die('Error: <strong>'.mysql_error().'</strong>');
$db = mysql_select_db('db_name') or die('Error<strong>'.mysql_error().'</strong>');
?>

现在我正在尝试PDO:

<?php
    $dbHost = 'localhost';
    $dbUser = 'root';
    $dbPass = '';
    $dbName = 'db_name';
    try
      {
        $dbconn = new PDO("mysql:host={$dbHost};dbname={$dbName}", $dbUser, $dbPass);
      }
    catch(PDOException $e)
      {
         echo $e->getMessage(); 
      }
        ?>

在我使用的php文件connect.php中,我正在做这样的包含:

include('../crud/connection.php'); **//its the file with the connection**

在我使用connection.php的这个文件中,我使用pdo对登录系统执行select语句。

我可以使用pdo连接,然后使用正常的sql语句对吗?

我的想法也是把我的sql正常语句PDO,但现在,我做了连接与PDO我想测试如果它的工作,那么我将尝试通过我的选择语句PDO选择语句!

我的登录代码:

 <?php if(isset($_POST['sendLogin']))
            {
                $f['email'] = mysql_real_escape_string($_POST['email']);
                $f['pass'] = mysql_real_escape_string($_POST['password']);


                if(!$f['email'] || !valMail($f['email']))  
                {
                  echo 'Email empty or invalid';
                }
                else if(strlen($f['pass']) <8 || strlen($f['pass'])>12)
                {
                    echo 'pass must have between 8 and 12 chars!';
                }
                else
                {
                    $autEmail = $f['email'];
                    $autpass = $f['pass'];
                    $query = "SELECT * FROM users where email= '$autEmail'";       
                    $exeqr = mysql_query($query) or die(mysql_error());
                    $assoc = mysql_fetch_assoc($exeqr);
                if(mysql_num_rows($exeqr) == 1 )
                {
                    if($autEmail == $assoc['email'] && $autpass == $assoc['pass'])
                    {
                        $_SESSION['assoc'] = $assoc;
                        header('Location:'.$_SERVER['PHP_SELF']);
                    }
                    else
                    {
                        echo ' wrong answer';
                    }

                }
                else
                {
                    echo 'email does no exist';
                }
                }
            }

html

<form name="login" action="" method="post">
            <label>
                <span>E-mail:</span>
                <input type="text" class="radius" name="email" value="<?php if(isset($f['email'])) echo $f['email']; ?>" />
            </label>
            <label>
                <span>Pass:</span>
                <input type="password" class="radius" name="senha" value="<?php if(isset($f['senha'])) echo $f['senha']; ?>" />
            </label>
            <input type="submit" value="Login" name="sendLogin" class="btn" />
</form>

mysql_函数不能与PDO一起使用。如果你想执行上面的查询你必须使用这样的语句:

http://www.php.net/manual/en/pdo.prepare.php

问题中的例子:

$query = 'SELECT * FROM users where email = :email';
$sth = $dbh->prepare($query);
$sth->execute(array(':email' => $autEmail));

试试这个:

$dbconn = new PDO("mysql:dbname={$dbName};host={$dbHost}", $dbUser, $dbPass);

而不是

  <?php
        $dbHost = 'localhost';
        $dbUser = 'root';
        $dbPass = '';
        $dbName = 'db_name';
        try
          {
            $dbconn = new PDO("mysql:host={$dbHost};dbname={$dbName}", $dbUser, $dbPass);
          }
        catch(PDOException $e)
          {
             echo $e->getMessage(); 
          }
            ?>

试试这个

 <?php 
define('DB_host', 'localhost');
define('DB_username', 'root'); 
define('DB_password','');
define('DB_name','');
         try
           {
             $dbconn = new PDO("mysql:host=".DB_host.";dbname=".DB_name,DB_username,DB_password);
           }
         catch(PDOException $e)
          {
             echo $e->getMessage(); 
           }
            ?>

OK,根据PHIL的声明,我建议确保你的数据库是存在的。我试过使用你的代码,它在我的结束工作。div =)

您正在混合mysql函数与PDO函数。您需要执行以下操作:

  1. 保留mysql函数
  2. 更改所有代码以反映PDO函数。这包括所有的mysql_*函数。

如果事情很容易做,我建议#2,否则保持#1,除非你有其他原因。