如何使用已弃用的mysql_ *函数成功重写旧的mysql-php代码?第二部分

时间:2012-06-06 23:48:23

标签: php mysql database deprecated

继续本主题,我们解释了PDO How to successfully rewrite old mysql-php code with deprecated mysql_* functions?现在关于理解预准备语句的大多数问题......所以为了删除mysql_ *字符串,有一些例子,所以我对所有和其他用户的问题可能是这个找到有用的解决方案是最好的...所以旧的“编造*代码:

的例子
in config.php: 
$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'login');
in login.php
$db->selectDb("login");
$query = mysql_query("SELECT * FROM account WHERE id='".$_session["id"]."' LIMIT 1");  
$result = mysql_fetch_array($query);

$ _ session [“id”]是在实际登录时定义的,所以现在我们有几个选项可以这样做:

In config.php:
$db_people = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');
$db_login = new PDO('mysql:host=127.0.0.1;dbname=login;charset=UTF-8', 'root', 'pass');

And in login.php 1):
$stmt = $db_login->prepare("SELECT * FROM account WHERE id=? LIMIT 1");
$stmt->execute(array($_session["id"]));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

或者在排除查询时这个更好?或者前一个更好?

And in login.php 2):    
$query = "SELECT * FROM account WHERE id=? LIMIT 1";
$parameters = array($_session["id"]);
$statement = $db_login->prepare($query);
$statement->execute($parameters);
$results = $statement->fetch(PDO::FETCH_ASSOC);

此登录表单:

  public function login($user, $password)
  {
    global $web, $db;    
    if (!empty($user) && !empty($password))
    {    
      $user = $web->esc($user);
      $password = $web->doHash($user, $password);

      $db->selectDb('login');
      $qw = mysql_query("SELECT * FROM account WHERE username='".$user."' AND pass_hash='".$password."'");

      if (mysql_num_rows($qw) > 0)      
      {    
        $result = mysql_fetch_array($qw); 
        $_session['name'] = $result['username'];
        $_session['id'] = $result['id'];  
        return true;          
      }
      else
        return false;        
    }
    else
      return false;
  }

转入此表格:

  public function login($user, $password)
  {
    global $web, $db_login;    
    if (!empty($user) && !empty($password))
    {    
      $user = $web->esc($user);
      $password = $web->doHash($user, $password);

      $stmt = $db_login->prepare("SELECT * FROM account WHERE username=? AND pass_hash=?");
      $stmt->execute(array($user, $password));
      $rows = $stmt->rowCount();

      if ($rows > 0)      
      {    
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
        $_session['name'] = $result['username'];
        $_session['id'] = $result['id'];  
        return true;          
      }
      else
        return false;        
    }
    else
      return false;
  }

可以或者再次单独查询或者以完全不同的方式进行吗?谢谢大家。

当有多个stmt我应该使用不同的名字吗?例如,我使用stmt一次并在使用result2执行stmt秒之后生成result1我是否应该为stmt变量选择不同的名称,或者只有结果名称可以不同?

1 个答案:

答案 0 :(得分:0)

好的解决方案login.php 1)似乎很简单,不急。 此外,登录页面似乎工作正常,因此它应该根据每个规则和确定:)