2013-02-17 26 views
-2

我有一个登录系统,我一直在使用mysql函数,如real_escape_strings等。但现在我试图将其转换为PDO,因为它比mysql功能更现代。现在的问题是它不适用于PDO。以下是我的代码,请告诉我我该做什么错了。如何将mysql函数转换为现代PDO

<?php 
try { 
$con = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root',''); 

} catch(PDOException $e){ 
echo 'Connection failed'.$e->getMessage(); 
} 

?> 
<?php 
$is_ajax = $_POST['is_ajax']; 
    if(isset($is_ajax) && $is_ajax) 

    { 
$username =(isset($_POST['username']))? trim($_POST['username']): ''; 
$Password=(isset($_POST['Password']))? $_POST['Password'] : ''; 
$redirect=(isset($_REQUEST['redirect']))? $_REQUEST['redirect'] : 
'view.php'; 
$query ='SELECT username FROM tish_user WHERE '. 
'username="'.($username,$con).'" AND ' . 
    'Password = md5("'.($Password,$con).'")'; 
    $result = $con->prepare($query); 
    $result->execute(); 
     if(count($result)>0) 
     { 
     $_SESSION['username']=$username; 
$_SESSION['logged'] = 1; 
      echo "success"; 
     } 
     else { 
//set these explicitly just to make sure 

} 
    } 

?> 
+3

'($的用户名,$ CON)'答案 - 这是什么? – 2013-02-17 08:09:06

+1

@你的常识你是一个伟大的人,这是唯一的问题。所以你固定感谢100%。每一个问题我得到你设法解决它再次感谢 – humphrey 2013-02-17 08:12:42

+2

请了解***现代方式***创建查询:http://www.phptherightway.com/#databases – deceze 2013-02-17 08:14:01

回答

2

删除所有无用的代码

<?php 
$con = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root',''); 

if(!empty($_POST['is_ajax'])) 
{ 
    $sql = 'SELECT id FROM tish_user WHERE username=? AND Password = md5(?)'; 
    $stm = $con->prepare($sql); 
    $stm->execute(array($_POST['username'],$_POST['Password'])); 
    if($row = $stm->fetch()) 
    { 
     $_SESSION['id'] = $row['id']; 
    } 
} 
?> 

后,你需要太检查字母大小写。大写'密码'看起来很可疑。最好选择一个标准(全部小写),并按照它无处不

这是我在How prepared statements can protect from SQL injection attacks?问题解释它是如何工作

+0

是的这很好,但我想问这个代码是否逃脱字符串? – humphrey 2013-02-17 08:27:06

+0

是的,我没有访问链接,谢谢 – humphrey 2013-02-17 08:55:03

+0

请邀请我在谷歌谈话kingmusa5 @ gmail.com – humphrey 2013-02-17 09:39:05

0
$query ='SELECT username FROM tish_user WHERE username=? AND Password = md5(?))'; 
$result = $con->prepare($query); 
$result->execute(array($username, $password)); 

这将自动跳脱字符串为您服务。

+0

非常有帮助谢谢 – humphrey 2013-02-17 08:28:36