Geoffrey Hale
Geoffrey Hale

Reputation: 11438

Why empty result when passing argument via execute?

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:

Upvotes: 0

Views: 73

Answers (1)

bassxzero
bassxzero

Reputation: 5041

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(); 
       }

Upvotes: 1

Related Questions