为什么在通过执行传递参数时清空结果?

I expected moving WHERE argument value string from the query to execute() would be a simple adjustment but it fails. I've read related documentation and cannot understand why I'm getting an empty result in the latter case. How can I pass the school_year in the execute method?

Returns expected results:

$query =   "SELECT faculty_id, school_year, term, department_name, course_name, section_id
                    FROM all_school_classfeedback
                    WHERE school_year = '2012-2013'";
        if ($stmt = self::$dbCon->prepare($query)) 
        {

            $stmt->execute();

Returns empty:

$query =   "SELECT faculty_id, school_year, term, department_name, course_name, section_id
                    FROM all_school_classfeedback
                    WHERE school_year = :school_year";
        if ($stmt = self::$dbCon->prepare($query)) 
        {

            $stmt->execute(array(
                ':school_year' => '2012-2013'
            )); 

Datatype of field: school_year varchar(10) utf8_general_ci

Related links and posts:

I think the parm is failing to bind because its data type is taken from php. Basically MySQL is looking for one data type (date?) and PHP says that the parm is of a different type (string).

Try

$year = '2012-2013';

$query =   "SELECT faculty_id, school_year, term, department_name, course_name, section_id
                    FROM all_school_classfeedback
                    WHERE school_year = :school_year";
        if ($stmt = self::$dbCon->prepare($query)) 
        {
             $stmt->bindParam(':school_year', $year, PDO::PARAM_STR);
             $stmt->execute(); 
       }