2014-06-26 18 views
0

返回值我有這樣一個類:接收類接力

<?php 
class connection { 
    public $db; 

    public function __construct() { 
    $this->db = new mysqli('localhost', 'root', '', ''); 

    if($this->db->connect_errno > 0){ 
     die('error ' . $this->db->connect_error); 
    } 
    $this->db->set_charset("utf8"); 
    } 

} 

class masssave extends connection { 
    public $sql; 
    public function insert_all { 
    // do some works 
      if ($sql = $this->db->query("INSERT INTO $db_name ($str_db_value) values ($str_form_value_found) ")) { 
      return true;  
      } 
      else { 
      return false; 
      } 
    } 


} 
?> 

masssave類我seted $sql爲public,現在我想在一些頁面中使用這個類,像寄存器頁

$save = new masssave; 
if ($save->sql = true) { 
    echo 'ok'; 
} 
else { 
    echo 'failed'; 
} 

但上代碼不工作,它總是echo 'ok'即使該查詢失敗,

我也用if ($save->sql == true)但這種合作德始終echo 'failed'

我在接力新手,但我想我的PHP類都OK,我想我檢查返回值做錯誤的方式

回答

3
  1. 替換$sql = $this->db->query$this->sql = $this->db->query - $sql - 局部變量。 $this->sql - 對象屬性
  2. 呼叫適當的方法後$save = new masssave;使用$save->insert_all()
  3. 使用比較(但不分配新建分配FY)$save->sql = true - 分配新建分配FY,$save->sql == true - 比較。分配會導致變量的值變大,所以$save->sql = true總是成立。
+0

+1 this is你應該做什麼OP。 – Darren

+0

@sectus非常感謝:) – user3325376

0

此行應該是...

if ($save->insert_all() == true) 

因爲....首先,你只是檢查是否設置了$ save-> sql,在你的情況下它總是回顯真實。

而且你甚至不檢查你實際上設置(= VS ==)

$save = new masssave; 
if ($save->sql = true) 

應該是...

$save = new masssave; 
if ($save->sql == true) { 

但是,這將始終返回true不管怎麼說,因爲它的只是檢查變量是否存在,它是做什麼的。你真正想要的是我在頂部發布的內容。因爲查詢實際上在insert_all函數內部,這是你返回true或false的地方。

+0

也有可能在$ SQL =永遠是正確的,因爲他只是在爲變量賦值有 –

+0

@KyleK它不工作,請再次看到代碼,'insert_all'它不返回任何東西,'$ sql'回報'true或false' – user3325376

+0

@KaiQing不,我在類文件中使用了echo,它工作正常 – user3325376

0

它總是echo ok因爲你設置$save->sqltrue

if ($save->sql = true) { 

上面是一個很大的NO NO

你需要的是比較,所以使用==比較值

if ($save->sql == true) { 

這將是簡單到只是做:

if($save->sql) { 
    echo 'ok; 
} else { 
    echo 'fail'; 
} 

上述if檢查基本上是說IF(TRUE) { SAY OK} ELSE { SAY FAIL}

+0

它總是'echo'fail''即使它是真的 – user3325376