2014-12-07 2 views
1

데이터베이스에 저장된 세션 토큰에서 사용자의 (1 - 세션 토큰이있는 것만) 사용자 이름을 검색하려고합니다. 행 ID, 코드, 사용자 이름으로 서식이 지정됩니다. 나는 그 다음 사용자 이름을 검색 할 수있는 배열에 행을 저장하는 행을 검색하려고합니다. 배열로 PDO 데이터베이스에서 항목을 검색하여 문자열을 검색하는 방법

테이블 SQL

CREATE TABLE `signup` (

    `id` int(11) NOT NULL AUTO_INCREMENT, 

    `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 

    `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 

    PRIMARY KEY (`id`), 

    UNIQUE KEY `code` (`code`) 

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; 

테이블 정보

id code   username 
1 123-145-546-48 CallumCarmicheal 

나는이 알아낼 수 없습니다

$db2 = new PDO("mysql:host={$mysql_host};dbname={$mysql_database};charset=utf8", $mysql_user, $mysql_password, $options); 

$token = "123-145-546-48"; 

$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = $token 
    "; 

try { 
    $stmt = $db2->prepare($query); 
    $stmt->execute(); 
} catch (PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 


// return the Username from getting the token 
return ... 

테스트를 봤는데 현재 코드는, 아마 간단하지만 관리자가 세션 코드를 생성하고 사용자 이름을 설정해야하는 가입 시스템을 만들었습니다. 그러면 사용자 이름이 표시되고 사용자는 이메일과 비밀번호를 입력 할 수 있습니다. 이것은 사용자 이름을 검색 할 것이지만 내가 시도한 모든 것은 빈 문자열을 반환하거나 아무 것도 반환하지 않습니다. 사용자 등록 후 세션 토큰이 삭제됩니다.

답변

2

$code 그게 전부가 code에 사용되는 VARCHAR/TEXT입니다가는 경우 먼저, 당신은 따옴표와 함께 싸서해야 끕니다. 당신이 준비하고 있기 때문에

하지만, 그냥 바인딩 :

$results = $stmt->fetch(PDO::FETCH_ASSOC); 
echo $results['username']; // and others 
3

쿼리를 실행 한 후에 결과를 가져와야합니다.

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
echo $result['username']; // or do whatever you want with the username 

http://php.net/manual/en/pdostatement.fetch.php

나는 또한 나의 SQL을 매개 변수화하는 것을 선호합니다.

$query = "SELECT id, code, username 
      FROM signup 
      WHERE 
      code = ?"; 
try { 
    $stmt = $db2->prepare($query); 
    $stmt->execute(array($token)); 
2

당신에게 :

$token = "callumc"; 

// add a named placeholder for preparation 
$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = :code 
    "; 

try { 
    $stmt = $db2->prepare($query); 
    // bind it 
    $stmt->execute(array(':code' => $token)); 
} catch (PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 

을 다음, 당신이 무언가를 얻을 것으로 예상하는 경우, 당신은 결과를 가져 오기 위해 필요 SELECT의 결과로 아무 것도하지 않습니다. $rowid, codeusername 키가 어디에

$stmt->execute(); 

후 당신은 PDOStatement::fetch()

$row = $stmt->fetch(); 

으로 얻어진 필드를 검색 할 수 있습니다.


또한, 귀하의 SQL 쿼리를 설정하는 것은 그 방법은 안전하지 않습니다, 대신

$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = ? 
    "; 
// ... 
$stmt->execute(array($token)); 
같은 것을 사용
관련 문제