2013-06-05 4 views
-1

mysqli로 변환하려고하는데 예상대로 어려움에 처해있다.mysqli가 여러 행을 가져 오는 중

다음과 같이 로그인 스크립트를 만들었습니다. 제대로 작동한다고 생각합니다. (난 그냥 싶어, 암호가 해시 될 필요가 알고 그것을 위로 처음 실행)

// POST variables 
$username = ($_POST['username']); 
$password = ($_POST['password']); 

//Input Validations 
if($username == '') { 
    $errmsg_arr[] = 'Username required'; 
    $errflag = true; 
} 
if($password == '') { 
    $errmsg_arr[] = 'Password required'; 
    $errflag = true; 
} 

//If there are input validations, redirect back to the login form 
if($errflag) { 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    session_write_close(); 
    header("location: logon.php"); 
    exit(); 
} 

//prepared statements 

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username='$username' AND password='$password'")) { 
$stmt->execute(); 

/* bind variables to prepared statement */ 
$stmt->bind_result($user, $pass); 

/* fetch values */ 
$stmt->fetch(); 
if ($user == $username && $pass == $password) 
{ 
    printf("Welcome %s", $user); 
} 
else 
{ 
    printf("Login failed"); 
} 


/* close statement */ 
$stmt->close(); 
} 
/* close connection */ 
$mysqli->close(); 

?> 
내가 로그인이 통과하면 내가

다음 않았다 mysqll와 함께 이전에, 내 세션 변수를 설정하려는

$qry="SELECT * FROM auth WHERE username='$username' AND password='$password'"; 
$result=mysql_query($qry); 

//Check whether the query was successful or not 
if($result) { 
    if(mysql_num_rows($result) > 0) { 
     //Login Successful 
     session_regenerate_id(); 
     //Set session variables 
     $member = mysql_fetch_assoc($result); 
     $_SESSION['SESS_MEMBER_ID'] = $member['ID']; 
     $_SESSION['SESS_USERNAME'] = $member['username']; 
     $_SESSION['SESS_FIRST_NAME'] = $member['fname']; 
     $_SESSION['SESS_PASSWORD'] = $member['password']; 
     $_SESSION['SESS_AUTH_LEVEL'] = $member['auth_level']; 
     session_write_close(); 
     header("location: index"); 
     exit(); 
    }else { 
     //Login failed 
     $errmsg_arr[] = 'user name or password not found'; 
     $errflag = true; 
     if($errflag) { 
      $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
      session_write_close(); 
      header("location: logon.php"); 
      exit(); 

내 문제는 "$ member = mysql_fetch_assoc ($ result);"이라고 생각합니다. mysqli에서 어떻게하면됩니까? $mysqli->query(string), $mysqli_result->num_rows()$mysqli_result->fetch_assoc()

: 내 준비된 문은 사용자 이름과 암호를 결합됨에 따라, 이전에 내가

로부터

감사

당신은 기본적으로 기능을 사용할 필요가
+0

는 HTTP의 예를 참조를 : //php.net/manual/en/mysqlinfo.api.choosing.php. – deceze

+0

http://www.php.net/manual/en/class.mysqli-result.php를 보시면 fecth_assoc 배열이 있습니다. – Jerska

+0

[mysqli로 옮길 필요가 없다는 말을 이미 들었습니다.] (http://stackoverflow.com/questions/16921090/moving-to-mysqli). 대신 PDO 준비 문으로 이동하십시오. 아니면 그냥 mysql을 유지 –

답변

0

을는 SELECT *를 사용 코드는 다음과 같습니다.

$mysqli = new mysqli(...); 

$qry = "SELECT * FROM auth WHERE username=? AND password=?"; 
$stmt = $mysqli->prepare($qry); 
$stmt->bind_param('ss', $username, $password); 

//Check whether the query was successful or not 
if($stmt->execute()) { 
    $result = $stmt->get_result(); 
    if($result->num_rows() > 0) { 
     session_regenerate_id(); 
     $member = $result->fetch_assoc(); 
     $_SESSION['SESS_MEMBER_ID'] = $member['ID']; 
     ... 
    } else { 
     ... 
    } 
} 
... 

직접 여기에 질문과 관련,하지만 당신은 정확하게 두 라인을 대체하여 준비된 문을 사용하는 것이 좋습니다되지 않음 :이와

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username='$username' AND password='$password'")) { 
    $stmt->execute(); 
    ... 

:

if ($stmt = $mysqli->prepare("SELECT username, password FROM auth WHERE username=? AND password=?")) { 
    $stmt->bind_param('ss', $username, $password); 
    $stmt->execute(); 
    ... 
+0

왜 downvote? – gkalpak

+0

큰 감사, 나는 그것을 줄 것이다 (btw 나는 가까운 표를 가지지 않았다) – Gary

+0

이 dosnt는 나의 준비된 성명을 사용한다, 나는 또한 SQL injection을 막기 위해 prepared statements를 사용하고 싶다. 두 번의 별도 쿼리를 실행해야합니까? – Gary

관련 문제