아래 코드를 시도 할 때 약간 혼란 스럽습니다. 원하는 결과가 나타납니다.PHP PDO DB 함수가 요청한 값 대신 1을 반환합니다.
include_once('config.class.php');
$db = Core::getInstance();
$whr = '[email protected]';
$inv = $db->dbh->prepare("SELECT * FROM ruj_users WHERE email=:whr");
$inv->execute(array(":whr"=>$whr));
$row = $inv->fetch(PDO::FETCH_ASSOC);
echo $row['email'];
echo $row['full_name'];
그러나 다음 코드를 실행하면 원하는 결과가 아닌 1이 반환됩니다.
include_once('config.class.php');
$db = Core::getInstance();
$whr = '[email protected]';
function fetchUser($whr){
$db = Core::getInstance();
$inv = $db->dbh->prepare("SELECT * FROM ruj_users WHERE :whr");
$inv->execute(array(':whr'=>$whr));
$res = $inv->fetch(PDO::FETCH_ASSOC);
return $res;
}
$row = fetchUser("email = '".$whr."' ");
echo $row['email'];
echo $row['full_name'];
난 그냥이 $ 행을 반영하는 코드를 편집 = fetchUser ("이메일 = '"WHR $.. "'"); 나는 다시 1을 받았다. –
'a = b'와 같은 명령문이 아니라 변수 만 바인딩 할 수 있습니다. – jeroen
변수 만 바인딩 할 수 있고 명령문을 바인딩 할 수없는 이유는 전체 바인딩 된 변수가 SQL 문을 컴파일한다는 것이고 값만 누락하기 때문입니다. 명령문의 실행 부분은 변경되지 않습니다. DB가 매번 명령문을 다시 컴파일하지 않고 데이터가 더럽지도 실행될 코드를 수정하지 않기 때문에 보안 구멍을 제거하기 때문에 성능 이점이 있습니다. –