2014-10-03 5 views
1

내가 pdo 작동하는 방법을 배우려고 노력하면서 이전 mysqlpdo 변환하려고했습니다,이 하나의 파일에 대한 작업했습니다 시간은 지금 내 머리를 파열시키고 무엇이 잘못되었는지를 알 수 없으며, 나는 그 많은 것을 확신한다. 치명적인가 경고 여부에 관련이 있는지경고 : PDO :: prepare() 매개 변수 1 문자열, 주어진 개체를 기대합니다

try{ 
    $check_user_data = $dbh->query("SELECT * FROM members WHERE username = '$username'"); 
    $stmt = $dbh->prepare($check_user_data); 
    $stmt->execute(); 
    $result->bind_result($username); 
    $data_exists = ($check_user_data->fetchColumn() > 0) ? true : false; 
    if($data_exists = false){ 
     $final_report.="This username does not exist.."; 
    }else{ 
     $get_user_data = $stmt->fetch(PDO::FETCH_ASSOC); 
     if($get_user_data['password'] == $password){ 
      $start_idsess = $_SESSION['username'] = "".$get_user_data['username'].""; 
      $start_passsess = $_SESSION['password'] = "".$get_user_data['password'].""; 
      $final_report.="You are about to be logged in, please wait a few moments.. <meta http-equiv='Refresh' content='2; URL=members.php'/>"; 
     } 
    } 
    foreach ($dbh->query($sql) as $row){ 
    } 
    $dbh = null; 
} 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

또한 치명적인

Fatal error: Call to a member function execute() on a non-object 

확실하지 받고.

답변

2

첫째, 변경이 두 라인 :

$check_user_data = $dbh->query("SELECT * FROM members WHERE username = '$username'"); 
$stmt = $dbh->prepare($check_user_data); 

에 :

$stmt = $dbh->prepare("SELECT * FROM members WHERE username = :username"); 
$stmt->bindParam(':username', $username); 

이 SQL 주입을 방지 준비된 명령문의 매개 변수 기능을 사용합니다.

다음으로 PDO에는 bind_result 메서드가 없습니다. 이것은 MySQLI의 일부입니다. 결과를 얻으려면, 당신은해야한다 : 그것은 결과의 다음 행을 얻으려고하기 때문에

$get_user_data = $stmt->fetch(PDO::FETCH_ASSOC); 
$data_exists = ($get_user_data !== false); 

당신은 다음의 else 블록에 $stmt->fetch에 대한 호출을 제거해야합니다.

+0

'SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1065 쿼리가 비어 있습니다. '다른 모든 기능은 훌륭합니다. 나쁜 대답은 새로운 대답을 바꿉니다. –

+0

'$ dbh-> query ($ sql)'이 그 줄에서 일어 났습니까? '$ sql'을 할당 했습니까? – Barmar

+0

거기에 이걸 가지고 있었다면 내가 필요하다고 생각하지 않아서 가져 갔어. 왜 거기에 있었는지 모르겠다. 'foreach ($ dbh-> query ($ sql) as $ row)', 모든 도움에 감사드립니다. –

0

치명적인 경고와 분명히 관련이 있습니다. $dbh->prepare$dbh->query() (PDOStatementObject)의 결과를 전달하여 $dbh->prepare이 오브젝트가 아닌 것을 리턴하도록합니다.

$dbh->prepare 호출로 SQL을 이동하고 $dbh->query()을 완전히 제거하십시오.

관련 문제