2013-06-01 1 views
0

은 내가 이런 식으로 쓴 있도록 바인드 변수 혜택을 누릴 수있는 간단한 SQL 쿼리를 매개 변수 :바인드 오작동 PDO는

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=':user_id' AND date(start_time)=date(':on_specific_day')"); 
$stmt->bindParam(':user_id',$where['user_id']); 
$stmt->bindParam(':on_specific_day',$where['on_specific_day']); 

당신은 저장하는 데 사용됩니다 where라는 연관 배열이 볼 수 있듯이 내 어디 조건. 이 문을 실행할 때 오류를 반환하지 않지만 행 수는 0입니다. 대신 바인드 변수를 사용하는 꿈을 버리고 다음을 수행하십시오.

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id='{$where['user_id']}' AND date(start_time)=date('{$where['on_specific_day']}')"); 

쿼리가 올바르게 실행되고 테스트 케이스에 2 개의 결과가 반환됩니다. 누군가 나를 미치도록 미칠 수 있습니까? : ^)

답변

3

당신은 당신의 PDO parameters와 인용 부호로 묶어야 할 필요가 없습니다 :

$stmt = $this->db->prepare("SELECT * FROM activities WHERE user_id=:user_id AND date(start_time)=date(:on_specific_day) 
+3

조금을 설명하기 위해 : 준비된 조회에 매개 변수가 완료 변수뿐만 아니라 텍스트를 대체 할 수 있습니다. 따라서 문자열 변수는 DB가 이미 문자열임을 알고 있기 때문에 추가 따옴표가 필요하지 않습니다. – IMSoP

+1

나는 간단한 대답을 좋아한다. 매력처럼 일했습니다. 고마워요! – ken