2014-04-29 4 views
0

내 코드 :PHP 및 MySQL에서 PDO로 열 값을 표시하는 방법은 무엇입니까?

$db1 = new PDO ('mysql:host=localhost;dbname=db;charset=utf8', 'root', ''); 
    $db1->setAttribute (PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING) 
    $qry = $db1->prepare('SELECT user_name FROM user_data WHERE user_id = $userid LIMIT 1'); 
    $qry -> execute(array($userid)); 
    $row = $qry -> fetch(); 
    echo $qry -> user_name; 

그리고 그것은 아무것도

에싱 (Eching)하지 내가 $ 사용자 ID에 의해 찾으려하고

+4

이 될 것으로 보인다 준비된 통계의 장점이없는 준비된 진술 nts!?!?!? – Strawberry

+0

누락 된 세미콜론 .....;) –

+0

** 외부 변수를 사용하여 SQL 문을 작성하면 코드가 SQL 삽입 공격에 취약 해집니다. ** 또한 "O'Malley"와 같은 작은 따옴표가있는 입력 데이터 당신의 질문을 날려 버릴 것입니다. 웹 응용 프로그램을 보호하기 위해 PDO 모듈을 사용하여 매개 변수가있는 쿼리에 대해 알아보십시오. [이 질문] (http://stackoverflow.com/questions/60174)에는 많은 상세한 예제가 있습니다. 위험의 대안 및 설명은 http://bobby-tables.com/php를 참조하십시오. ** 외부 데이터로 작성된 SQL 문을 실행하는 것은 문앞에서 발견 된 재료로 만든 스프를 먹는 것과 같습니다 ** –

답변

-1

대답은 :

$db1 = new PDO ('mysql:host=localhost;dbname=db;charset=utf8', 'root', ''); 
$db1->setAttribute (PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); 
$sth = $db1->prepare("SELECT user_name FROM user_data WHERE user_id = '$userid'"); 
$sth->execute(); 
$result = $sth->fetchColumn(); 
$username =($result); 
print($username); 
+0

이 대답은 즉각적인 문제를 해결할 수 있지만 SQL의 안전하지 않은 건물은 그대로 유지합니다. –

0
$db1 = new PDO ('mysql:host=localhost;dbname=db;charset=utf8', 'root', ''); 
$db1->setAttribute (PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); 
$qry = $db1->prepare("SELECT user_name FROM user_data WHERE user_id = ? LIMIT 1"); 
$qry -> execute(array($userid)); 
$row = $qry->fetch(); 
echo $row->user_name; 
(USER_ID = 1과 에코 이름 같은) _ 이름 열을 에코
0

변경 :

$qry = $db1->prepare('SELECT user_name FROM user_data WHERE user_id = $userid LIMIT 1'); 

경우 :

$qry = $db1->prepare('SELECT user_name FROM user_data WHERE user_id = ? LIMIT 1'); 

당신은 문 실행을 통해 USER_ID하는 값을 할당합니다

편집 :

추가 세미콜론

$db1->setAttribute (PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); <<<-- Missed semicolon 
관련 문제