Подготовленный оператор не работает в PHP - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь выполнить подготовленный оператор с помощью mysqli, но оператор никогда не выполняется с результатами и не выдает ошибку.Но выполнение запроса обычно работает.

Подготовленный запрос выглядит следующим образом:

SELECT * FROM games WHERE YEARweek(game_date)=?

Обычный не подготовленный запрос - это

SELECT * FROM games WHERE YEARweek(game_date)= YEARweek(current_DATE) +1

Есть идеи почему?

Код для выполнения запроса находится в разных местах, но в короткой версии он выглядит так:

$WHERE_CLAUSE='';
        $first=true;
        if(isset($conditions['conditions'])) {
            foreach($conditions['conditions'] as $key=>$condition){
                    if(is_array($condition)){

                    } else {
                        if($first)
                            $WHERE_CLAUSE.=$key.'=?';
                        else 
                            $WHERE_CLAUSE.=' AND '.$key.'=?';

                        $input_data[$key]=$condition;
                        $first=false;
                    }
            }//end foreach

            if(!empty($WHERE_CLAUSE)){
                $query.='WHERE '.$WHERE_CLAUSE.' ';
            }
        }

        $result=PVDatabase::preparedSelect($query, $input_data);

public static function preparedQuery($query, $data, $formats = '') {

    if (self::_hasAdapter(get_class(), __FUNCTION__))
        return self::_callAdapter(get_class(), __FUNCTION__, $query, $data, $formats);

    if (self::$dbtype == self::$mySQLConnection) {
        self::$link -> prepare($query);
        $count = 1;

        foreach ($data as $key => $value) {
            self::$link -> bindParam($count, $value);
            $count++;
        }//end foreach

        return self::$link -> execute();
    } else if (self::$dbtype == self::$postgreSQLConnection) {
        $result = pg_prepare(self::$link, '', $query);
        $result = pg_execute(self::$link, '', $data);
        return $result;
    } else if (self::$dbtype == self::$oracleConnection) {

    } else if (self::$dbtype == self::$msSQLConnection) {
        $stmt = sqlsrv_prepare(self::$link, $query, $data);
        return sqlsrv_execute($stmt);
    }

}//end preparedQuery

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

Поскольку вы не предоставили код, который используете для вызова запроса, я предполагаю, что вы, вероятно, связываете значение, содержащее выражение. Вместо того, чтобы быть оцененным, оно будет интерпретировано буквально.

0 голосов
/ 10 ноября 2011

PDO должен выходить из части YEARweek (current_DATE) +1 во втором запросе.

Сделайте это вместо:

$next_year = date('Y) + 1;

SELECT * FROM games WHERE YEARweek(game_date) = $next_year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...