2012-09-10 164 views
0

有人可以讓我的代碼更好/更容易嗎?我認爲現在編碼很糟糕。更好的代碼建議?

我想打電話給一個INSERT MYSQLI命令功能如下:

DatabaseHandler::__i('TABLENAME', array('username' => 'foobar', 'password' => 'world')); 

我使用的這個現在,但它不工作,我認爲這是一個更好的機會。

public function __i($table, $arr) { $c=$this->connection; 
    foreach ($arr as $name => $val): 
     $param1.=$name . ","; 
     $param2.="?,"; 
    endforeach; 

    $PARAM1 = substr_replace($param1, '', -1); 
    $PARAM2 = substr_replace($param2, '', -1); 

    $query = 'INSERT INTO '.$table.' ('.$PARAM1.') VALUES ('.$PARAM2.')'; 

    foreach ($arr as $name => $val): 
    if (is_int($val)) : 
     $param = 'i'; 
     endif; 

     if (is_string($val)) : 
     $param = 's'; 
     endif; 

     if (is_double($val)) : 
     $param = 'd'; 
     endif; 
     $binds.=$param; 
     $values.="'".$arr[$name]."',"; 

    endforeach; 

    $values = substr_replace($values, '', -1); 

    if ($s = $c->prepare($query)): 

     $args = $binds + $values; 
     call_user_func_array(array($s, 'bind_param'), array($binds, $values)); 
     $s->execute(); 
     $s->close(); 
    endif; 

} 
+2

您需要發佈此這裏的http://代碼審查。 stackexchange.com/ – amitchhajer

+1

只是一個觀點,讓代碼先「工作」然後嘗試優化它會不會更容易?如果您將問題更改爲「它不起作用」,那麼我們可能會先讓它工作,然後以工作代碼的形式跳轉到鏈接,如@amitchhajer建議 – dbf

+0

您應該明確地嘗試查明究竟是什麼首先工作。你會得到什麼錯誤? – Mahn

回答

0

很難說有什麼不工作,你應該找出自己,但我會寫這樣的事:

<?php 

/** 
* Prepares and executes an 'INSERT' query 
* 
* @param string $table 
* @param array $arr 
*/ 
public function __i($table, $arr) { 

    $c = $this -> connection; 

    foreach ($arr as $name => $val) { 
     $param1 .= $name . ","; 
     $param2 .= "?,"; 
    } 

    $PARAM1 = substr_replace($param1, '', -1); 
    $PARAM2 = substr_replace($param2, '', -1); 

    $query = 'INSERT INTO ' . $table . ' (' . $PARAM1 . ') VALUES (' . $PARAM2 . ')'; 

    foreach ($arr as $name => $val) { 

     switch (gettype($val)) { 
      case 'integer': $param = 'i'; break; 
      case 'string': $param = 's'; break; 
      case 'double': $param = 'd'; break; 
     } 

     $binds .= $param; 
     $values .= "'" . $arr[$name] . "',"; 

    } 

    $values = substr_replace($values, '', -1); 

    if ($s = $c -> prepare($query)) { 

     $args = $binds + $values; 
     call_user_func_array(array($s, 'bind_param'), array($binds, $values)); 
     $s -> execute(); 
     $s -> close(); 
    } 

} 

?> 
+0

獲取此錯誤:警告:參數2爲mysqli_stmt :: bind_param()預期爲(嘗試調用__insert(數組( 'username'=>'testing', 'password'=>'hej123' ) ,'users'); –

+0

http://ca.php.net/manual/en/mysqli-stmt.bind-param.php#96770 – Peon