0

以前はMysqlを使用してphpスクリプトを作成していましたが、今度はこのスクリプトをMysqliに切り替えて、すべてのMysqlコードをMysqliに変更するのに問題がありました。

この問題を解決する方法は?UTF8に名前を設定する機能が機能していません。それは言う:

警告:mysqli_set_charset()は正確に2つのパラメーターを期待し、1つは指定されています

ここで欠落している2番目のパラメーターは何ですか?

これが私が使っているクラスです

class Database {
    private $dbhost, $dbuser, $dbpass, $dbname;

    public function __construct($host,$user, $pass,$name){
        $this->dbhost = $host;
        $this->dbuser = $user;
        $this->dbpass = $pass;
        $this->name   = $dbname;
    }   

    public function Connect (){
        mysqli_connect ($this->dbhost,$this->dbuser,$this->dbpass,$this->dbname)
            OR die (mysqli_error());
    }


    public function SetNamesUTF8($unicode){
        mysqli_set_charset($unicode);
    }
}

$Database = new Database('localhost','root','root','schoolmanager');
$Database -> Connect(); 
$Database -> SetNamesUTF8('UTF8');
4

3 に答える 3

1

これがあなたが使わなければならないクラスです(少なくとも)

class Database {
    private $conn;

    public function __construct($host, $user, $pass, $name, $charset) {
    @$this->conn = mysqli_connect($host, $user, $pass, $name);
        if ( !$this->conn )
        {
            trigger_error(mysqli_connect_errno()." ".mysqli_connect_error());
        }
        mysqli_set_charset($this->conn, $charset) 
            or trigger_error(mysqli_error($this->conn));
    }   
}
$db = new Database('localhost','root','root','schoolmanager', 'utf8');

修正されたエラーがいくつかあります。

  • 短いコード
  • 死ぬことはありません
  • 接続エラーが修正されました

この例では、mysqliクラスの作成と使用法の両方で私のsafmysqlクラスを見ることができます。

于 2013-02-16T12:25:29.833 に答える
0

最初のパラメータは次のとおりです。

mysqli_connect()またはmysqli_init()によって返されるリンク識別子

ドキュメントによると

したがって、mysqli_connectからの戻り値を格納し、そこで使用する必要があります。2番目のパラメーターは、すでに使用した文字セットID文字列です。開いている接続を識別するため、何度も必要になります。これがあなたがそれをすることができる方法です:

class Database {
    private $dbhost, $dbuser, $dbpass, $dbname, $link;

    public function __construct($host,$user, $pass,$name){
        $this->dbhost = $host;
        $this->dbuser = $user;
        $this->dbpass = $pass;
        $this->name   = $dbname;
    }   

    public function Connect (){
        $this->link = mysqli_connect ($this->dbhost,$this->dbuser,$this->dbpass,$this->dbname)
            OR die (mysqli_error());
    }


    public function SetNamesUTF8($unicode){
        mysqli_set_charset($this->link, $unicode);
    }
}

もちろん、他のメソッドを呼び出す前にConnectを呼び出す必要があります。そのためのエラー処理を追加することを検討してください。

リンクされたドキュメントページで提案されているように、オブジェクト指向APIへの切り替えを検討することもできます。これにより、作業が楽になると思います。

于 2013-02-16T12:19:45.480 に答える
0

http://php.net/manual/en/mysqli.set-charset.phpによると、リンクが必要です...

bool mysqli_set_charset(mysqli $ link、string $ charset)

class Database {
    private $dbhost, $dbuser, $dbpass, $dbname, $link;

    public function __construct($host,$user, $pass,$name){
        $this->dbhost = $host;
        $this->dbuser = $user;
        $this->dbpass = $pass;
        $this->name   = $dbname;
    }   

    public function Connect (){
        $link = mysqli_connect ($this->dbhost,$this->dbuser,$this->dbpass,$this->dbname)
            OR die (mysqli_error());
    }


    public function SetNamesUTF8($unicode){
        mysqli_set_charset($link, $unicode);
    }
}

$Database = new Database('localhost','root','root','schoolmanager');
$Database -> Connect(); 
$Database -> SetNamesUTF8('UTF8');
于 2013-02-16T12:19:56.960 に答える