2013-02-16 112 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

相關問題