2011-08-09 71 views
3

請我能得到一些幫助重寫下面的代碼,使用預處理語句(mysqli的),這是新的給我,並試圖去抓住它:PHP,幫助重寫代碼使用預準備語句

 $sql = sprintf("SELECT `user`.`firstname`, `user`.`lastname` from `user` where `user`.email='%s' and `user`.password='%s'", 
       mysql_escape($_POST['username']), 
       mysql_escape($_POST['password']) 
      ); 
     $name = mysql_query($sql); 
     if(mysql_num_rows($name)==1){ 
      $_SESSION['name'] = mysql_fetch_assoc($name); 
      header("Location: /in.php"); 
      exit(); 
     }else{ 
      echo "here"; 
     } 

-------------------------更新-----------------

mysql_escape以下功能:

  function mysql_escape($data){return(mysql_real_escape_string((get_magic_quotes_gpc())?stripslashes($data):$data));} 

------------------- UPDATE2 --------------------- -----

我可以寫SELECT語句:

  $stmt = $db->prepare("SELECT `user`.`firstname`, `user`.`lastname` from `user` where `user`.email=? and `user`.password=?"); 
      $stmt->bind_param("ss", $_POST['username'], $_POST['password']); 
      $stmt->execute(); 
      $stmt->close(); 

,但我與這部分掙扎:

  $name = mysql_query($sql); 
      if(mysql_num_rows($name)==1){ 
       $_SESSION['name'] = mysql_fetch_assoc($name); 
       header("Location: /in.php"); 
       exit(); 
      }else{ 
       echo "here"; 
      } 
+1

這個頁面有使用一個很好的例子帶準備好的語句的mysqli:http://php.net/manual/en/mysqli.prepare.php。作爲一個方面說明,我相信'mysql_escape'從PHP 5.3.0開始已棄用,您應該使用'mysql_real_escape_string' – RageD

+1

而不是要求爲您完成工作 - 嘗試自己動手並提出一些具體問題 – zerkms

回答

3

這是一般語法。

$dbconn = mysql_connect(...); 
    $query = $dbconn->prepare("SELECT `user`.`name` from `user` where `user`.email=? and `user`.password=?"); 

    $query->bind_param("ss", $_POST['username'], $_POST['password']); 

    if ($query->execute() == true){ 
     $row = $query->fetch()) 
     $_SESSION['name'] = $row; 
     header("Location: /in.php"); 
     exit(); 
    }else{ 
     echo "here"; 
    } 

注意問號佔位符不帶引號/分隔符, 當我綁定參數,可以我指定SS,因爲兩個參數都是字符串

+1

完美的感謝你,我一直在努力設置SESSION。 感謝您的幫助。 – Dino

+0

我的榮幸。我將這個例子從你的代碼中移除了,但是你可能想要提取名字的值來寫入會話變量,例如$ _SESSION ['name'] = $ row ['name'];爲了便於處理。很高興我能幫上忙! –