我的PDO绑定如何仍在弄乱我的查询?

时间:2012-07-17 02:46:21

标签: php sql pdo

以下是一个用于处理自定义类的搜索方案的函数。

我已经惹恼了PDO默认将参数绑定为字符串这一事实,即使它不合适也会导致整数 - >字符串转换。正如您将看到的,我通过手动检查类型是否为整数来纠正,然后在这些情况下强制使用int。问题是,我的解决方案仅适用于'开始'值0 - 任何更高的错误,我不知道为什么。如果我手动将开始/计数值设置为适当的值(即,而不是:count我使用{$ count}),一切正常,所以看起来绑定仍然在搞乱。

如何?或者如果我错了......什么是对的?

    /*Query is:  
    SELECT tutor_school.id 
    FROM tutor_school, tutor_states 
    WHERE tutor_states.stateName=:state AND tutor_states.id=tutor_school.state 
    GROUP BY tutor_school.id order by tutor_school.name asc 
    LIMIT :start, :count*/

    $db = Database::get_user_db();
    $statement = $db->prepare($query);
    foreach ($executeArray as $key => $value)
    {
        if (getType($value) == 'integer')
        {
            $statement->bindParam($key, $executeArray[$key], PDO::PARAM_INT);
        }
        else
        {
            $statement->bindParam($key, $value);
        }
    }
    var_dump($executeArray);//count and start are still ints
    if ($statement->execute())
    {
        var_dump($executeArray);//start and count are now strings
        var_dump($statement->errorInfo());
        var_dump($query);
        $values = $statement->fetchAll();
        $return = array();
        foreach ($values as $row)
        {
            $school = School::schoolWithId($row[0]);
            if (!empty($school))
            {
                $return[] = $school;
            }
        }
        return $return;
    }

1 个答案:

答案 0 :(得分:0)

元数据(例如LIMIT参数)无法进行参数化。您将不得不使用(正确消毒)插值。