2013-02-16 114 views
0

我曾经使用Mysql制作我的php脚本,现在我想将此脚本切换到Mysqli和Im,将所有Mysql代码更改为Mysqli。警告:mysqli_set_charset()需要2个参数,1给出

如何解决这个问题? 将名称设置为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'); 

回答

0

第一个参数应该是类:

由mysqli_connect()或mysqli_init()

根据返回的链路标识符到the docs

所以,你需要存储来自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); 
    } 
} 

显然你需要调用连接,然后才能调用其他方法。考虑为其添加错误处理。

您也可以考虑切换到链接文档页面建议的面向对象的API,我认为这会让您的生活更轻松。

+0

同时捕捉! – PGallagher 2013-02-16 12:20:19

+0

你可以给我一个使用我目前课程的例子吗? 这是我第一次尝试与Mysqli合作..所以... – Devstar 2013-02-16 12:23:08

0

该公司预计,链接,根据http://php.net/manual/en/mysqli.set-charset.php ......

布尔mysqli_set_charset($ mysqli的链接,字符串变量$ 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'); 
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 class,无论是在库MySQLi类的创建和使用。

+0

非常感谢你,这是一个工作:) 所以,现在,我要做的所有事情包括这个类,然后呢? 我的意思是,我在其他文件中有其他查询.. 喜欢: mysql_fetch_object($查询) mysql_num_rows ....等 我应该怎么做在这种情况下? 我是否只包含连接的类并使用正确的mysqli语法更改这些查询? ---- – Devstar 2013-02-16 12:31:38

+0

更好地获得我链接到的类。你需要学习的唯一东西是* type-hinted占位符*。这并不难 - 虽然有很多答案可以证明。所以,您将不得不将所有旧的'mysql_fetch_object'调用更改为safemysql调用。它会使你的代码大大缩短。 – 2013-02-16 12:36:04

+0

好的,谢谢!我会试着看看我是否可以自己做。 再次感谢您的帮助 – Devstar 2013-02-16 12:38:38

相关问题