两个和一个pdo选择

时间:2013-07-24 23:51:30

标签: php pdo php-5.3

好的,所以我正在尝试将我的工作人员面板从mysql重新编码为pdo,看起来pdo不允许2并且声明在旁边。

这是我到目前为止所拥有的

这是我的基本html表单

<form name="input" action="" method="post">
  <p>Username:</p>
  <p>
  <input type="text" name="username" id ="username">
  </p>
  <p>Password:  </p>
  <p>
    <input type="password" name="password" id = "password">
  </p>
  <p>
    <input type="submit" value="Submit" name = "Submit">
  </p>
</form> 

然后我为提交按钮设置了if

   if (isset($_POST["Submit"])) {
$username= mysql_real_escape_string($_POST['username']);
$username2 = strip_tags($username);


$password= mysql_real_escape_string($_POST['password']);
$password2 = strip_tags($password);
$md5password = md5($password2);

$mod = 1 ;

$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ? AND mod = ?");
$statement->execute(array($username2,$md5password,$mod));
$count = $statement->rowCount();

/// If username and password is correct then we carry on
if ($count == "1")
  {


     $_SESSION['username'] = $username2 ; 

//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
  $ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
  $ip=$_SERVER['REMOTE_ADDR'];
}



$result5534453465 = mysql_query("UPDATE users SET lastip='".$ip."' WHERE username='".$_SESSION['username']."'") 
or die(mysql_error());  

mysql_query("INSERT INTO user_log (username, ip)
VALUES ('".$_SESSION['username']."', '".$ip."')");






  echo '<META HTTP-EQUIV="Refresh" Content="0; URL=home.php">';    
    exit;




  }else{
    echo "Password or username is wrong";  

  }
}

如果我采取第二个AND出来它工作正常但当然我需要它所以只有工作人员可以登录 我回应出用户名和md5密码都工作正常并匹配数据库条目。我是否已经说过,如果我删除第二个并且所有工作正常但我需要第二个那里只有工作人员可以登录。我做错了什么?

2 个答案:

答案 0 :(得分:0)

MOD是一个mysql保留字 - http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html所以它需要被转义 -

$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ? AND `mod` = ?");

答案 1 :(得分:0)

不是PDO扩展的专家,但是看一下手册,如果参数都是字符串(或至少是所有相同的类型),你可以只在$ statement-&gt; execute()中使用数组。 ?在它们混合的地方,如你的情况,你可能想要使用更复杂的execute方法版本 - 分离出bindParams函数。 e.g:

$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ? AND mod = ?");
// $statement->execute(array($username2,$md5password,$mod));

$statement->bindParam(1, $username2, PDO::PARAM_STR, 50); // check your lengths
$statement->bindParam(2, $md5password, PDO::PARAM_STR, 60);
$statement->bindParam(3, $mod, PDO::PARAM_INT);
$statement->execute();

这有效吗?