2013-02-05 1 views
0

이 코드는 열 이름 목록을 인쇄합니다. 하지만 나는 JSmith의 LoginName을 가진 사용자를 위해 UserName 테이블에 저장된 정보를 출력 할 것으로 기대합니다.MSSQL 준비 문에서 결과 가져 오기

$loginname = "JSmith"; 
$stmt = $dbh->prepare("SELECT * FROM UserName WHERE LoginName=:login_name"); 
$stmt->bindValue(":login_name", $login_name, PDO::PARAM_STR); 
$stmt->execute(); 

echo "<table><tr>"; 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
print_r($result); 
foreach ($result as $key => $val){ 
    echo "<th>" . $key . "</th>"; 
} 
echo "</tr>"; 
echo "</table>"; 

왜 사용자 이름이있는 행을 반환하지 않습니까? echo gettype($result)을 보면 문자열과 정수라는 것을 알 수 있습니다. 돌려 주어지는 배열의 각 조각 자체는 배열이 아닙니다. 나는 그것이 단순한 것이라고 확신하지만, 어떤 도움을 주셔서 감사합니다. 감사!

답변

1

값이 아닌 키를 인쇄하고 있습니다. 키는 C 럼 이름이며, 값은 해당 C 럼 값입니다.

print_r($result)$stmt->fetch()이 예상 한 정보가있는 배열을 반환하고 해당 HTML이이를 반영하지 않는다는 것을 보여줍니다.

http://php.net/manual/en/pdostatement.fetch.php#example-1018

의 그것을 해결하자.

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
print_r($result); 
foreach ($result as $key => $val){ 
    echo "<th>" . $key . "</th>"; 
    echo "<td>" . $val . "</td>"; 
} 
echo "</tr>"; 
echo "</table>"; 
+0

네, 맞습니다. 그러나 무언가는 아직도 맞지 않습니다. 왜냐하면'$ val'을 출력 할 때 레코드의 첫 번째 행에서 값을 얻습니다. 사용자 JSmith와는 레코드가 아닙니다. 그래서 루프에 문제가 있다고 생각하는 이유입니다. 그러나 쿼리와 함께 있어야합니다. 준비된 쿼리를 출력하여 구문이 제대로 해석되었는지 확인할 수 있습니까? – 1252748

+0

쿼리가 나에게 잘 보입니다. 데이터베이스 쉘에서 비슷한 쿼리를 실행하여 실제로 무엇이 있는지 확인할 수있다. SELECT * FROM UserName WHERE LoginName = 'JSmith'. –

+0

이 포스트 http://stackoverflow.com/a/2243512/1252748 실제로''$ stmt-> queryString'는 실제로 만들어진 쿼리를 볼 것을 권장합니다. 그러나 그것은'SELECT * FROM UserName WHERE LoginName = : login_name'을 보여줍니다. bindValue() 행 다음에 배치했습니다. 나는 이것을 다음과 같이보아야 할까? 아니면 JSmith라는 바인딩 된 값으로 그것을 볼 것으로 기대해야 하는가? – 1252748

관련 문제