0

我曾经使用 Mysql 制作我的 php 脚本,现在我想将此脚本切换到 Mysqli,而我在将所有 Mysql 代码更改为 Mysqli 时遇到了麻烦。

如何解决这个问题呢?将名称设置为 UTF8 的功能不起作用。它说 :

警告:mysqli_set_charset() 需要 2 个参数,1 个给定

我在这里缺少的第二个参数是什么?

这是我正在使用的课程

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');

修复了一些错误:

  • 更短的代码
  • 没有死
  • 连接错误已更正

对于示例,您可以查看我的safmysql 类,包括 mysqli 类的创建和使用。

于 2013-02-16T12:25:29.833 回答
0

第一个参数应该是:

mysqli_connect() 或 mysqli_init() 返回的链接标识符

根据文档

因此,您需要存储 mysqli_connect 的返回值,并在那里使用它。第二个参数是你已经使用过的字符集标识符字符串。您将需要很多次,因为它会识别打开的连接。你可以这样做:

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 回答