2013-02-04 73 views
0

我想通過一個mysqli連接到一個類,它使用預準備語句。但是,我錯過了一些東西,它不起作用。我做錯了什麼?不能通過mysqli連接到類

下面的代碼輸出 「無」

的index.php

$db_host = 'localhost'; 
$db_name = 'my_database'; 
$db_user = 'my_user'; 
$db_password = 'my_password'; 

$con = new mysqli($db_host,$db_user,$db_password,$db_name); 
if (mysqli_connect_errno()) 
{ 
    die(mysqli_connect_error()); 
} 

$obj = new Obj($con); 

obj.php

Class Obj 
{ 
    public function __construct(mysqli $con) 
    { 
     $sql = "SELECT * FOM myTable"; 
     if($con->prepare($sql)) 
     { 
      echo "yes"; 
     } 
     else 
     { 
      echo "no"; 
     }   
    } 
} 
+1

檢查你的代碼,if($ con> prepare($ slq))',你通過'$ slq'而不是'$ sql' –

+0

對不起。寫這篇文章時,這只是一個錯字。我已經在構造函數中編輯它 – Typhoon101

+0

,使用'print_r($ con)'來檢查你是否得到$ con或不是? –

回答

0

如果未能傳遞的mysqli連接到你的班級,你會成爲getti納克在這條線上一個致命的錯誤:

public function __construct(mysqli $con) 
          ^^^^^^ 

但不是唯一的構造函數開始運行良好,你甚至可以訪問一個類的方法:

if($con->prepare($sql)) 

綜上所述,所發生的一切是mysqli::prepare()回報false,因爲準備SQL語句時發生錯誤。我不熟悉MySQL,但你也許可以用mysqli::$error_listmysqli::$error得到確切的錯誤消息:

if($con->prepare($slq)) 
    { 
     echo "yes"; 
    } 
    else 
    { 
     echo "no: " . $con->error; 
    } 

如果SELECT * FOM myTable是實際的查詢,我想這是一個簡單的語法錯誤,因爲你拼錯FROM

0
Class Obj { 
    public function __construct(mysqli $con) { 
    $sql = "SELECT * FROM myTable"; 
    if($con->prepare($sql))  //here, u pass $slq before 
    { 
     echo "yes"; 
    } 
    else { 
     echo "no"; 
    } 
    } 
}