Вызов неопределенного метода Database :: prepare () - PullRequest
1 голос
/ 15 сентября 2010

из http://www.php.net/manual/en/class.pdo.php

###### config.ini ######
db_driver=mysql
db_user=root
db_password=924892xp

[dsn]
host=localhost
port=3306
dbname=localhost

[db_options]
PDO::MYSQL_ATTR_INIT_COMMAND=set names utf8

[db_attributes]
ATTR_ERRMODE=ERRMODE_EXCEPTION
############

<?php class Database {
    private static $link = null ;

    private static function getLink ( ) {
        if ( self :: $link ) {
            return self :: $link ;
        }

        $ini = _BASE_DIR . "config.ini" ;
        $parse = parse_ini_file ( $ini , true ) ;

        $driver = $parse [ "db_driver" ] ;
        $dsn = "${driver}:" ;
        $user = $parse [ "db_user" ] ;
        $password = $parse [ "db_password" ] ;
        $options = $parse [ "db_options" ] ;
        $attributes = $parse [ "db_attributes" ] ;

        foreach ( $parse [ "dsn" ] as $k => $v ) {
            $dsn .= "${k}=${v};" ;
        }

        self :: $link = new PDO ( $dsn, $user, $password, $options ) ;

        foreach ( $attributes as $k => $v ) {
            self :: $link -> setAttribute ( constant ( "PDO::{$k}" )
                , constant ( "PDO::{$v}" ) ) ;
        }

        return self :: $link ;
    }

    public static function __callStatic ( $name, $args ) {
        $callback = array ( self :: getLink ( ), $name ) ;
        return call_user_func_array ( $callback , $args ) ;
    }
} ?>

<?php // examples
$stmt = Database :: prepare ( "SELECT 'something' ;" ) ;
$stmt -> execute ( ) ;
var_dump ( $stmt -> fetchAll ( ) ) ;
$stmt -> closeCursor ( ) ;
?>

Что я сделал не так, или этот пример кода был неправильным?Вызов неопределенного метода Database :: prepare () в строке 167

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

В вашем классе Базы данных нет метода prepare.Он принадлежит объекту PDO, который вы храните как $link.

. Вероятно, вы ищете:

Database :: $link->prepare(...)

Обновите свой комментарий : Вы 'прав, не уловил этого.__callStatic доступен только в PHP> = 5.3.0 - у вас есть правильная версия?

0 голосов
/ 15 сентября 2010

как говорится в сообщении об ошибке: в вашем классе баз данных нет открытого статического метода noch с именем "prepare" ...

...