2015-07-10 2 views
0

Я хотел бы написать класс подключения к базе данных, и я не понимаю, как мне нужно написать метод select с помощью bind_param-s. Вот full code. А вот часть кода, где мне нужна помощь:PHP connection connection class bind_param

public function select($sql){ 
     $db = $this->connect(); //This methos connect to the DB 
     $stmt = $db->prepare($sql); 
     if($stmt === false){ //If the prepare faild 
      trigger_error("Wrong SQL", E_USER_ERROR); 
     } 
     $error = $stmt->bind_param("i", $id); 
     if($error){ 
      return "Error: ".$stmt->error, $stmt->errno; 
     } 
     $err = $stmt->execute(); 
     if($error){ 
      return "Error: ".$stmt->error, $stmt->errno; 
     } 
     $result = $stmt->bind_result($id); 
     $stmt->close(); 
     $dbConnection->closeConnection($db); 
     return $result; 
    } 

мне нужно есть его параметры или как я могу разрешить его?

+0

связать что? '$ id' не определен в вашей функции ... –

+0

Просто пример данных ... – PumpkinSeed

ответ

0

Вам также необходимо передать свои значения в эту функцию. И в конечном итоге привязать их к подготовленному заявлению.
Необязательно вы можете передать строку с типами, но по умолчанию все «s» будут делать.

Также помните, что следует подключать только один раз за выполнение сценария., а затем использовать одно единственное соединение на всем протяжении вашего кода.

И избавиться от всех этих проверок ошибок. Set mysqli in exception mode.

public function q($sql, $values = array(), $types = NULL) 
{ 
    $stm = $this->mysql->prepare($sql); 
    if (!$types) 
    { 
     $types = str_repeat("s", count($values)); 
    } 

    if (strnatcmp(phpversion(),'5.3') >= 0) 
    { 
     $bind = array(); 
     foreach($values as $key => $val) 
     { 
      $bind[$key] = &$values[$key]; 
     } 

    } else { 

     $bind = $values; 
    } 

    array_unshift($bind, $types); 
    call_user_func_array(array($stm, 'bind_param'), $bind); 
    $stm->execute(); 
    return $stm->get_result(); 
} 

поэтому он может быть использован как этот

$res = $db->q("SELECT name FROM users WHERE id=?", [$id]); 

или

$res = $db->q("SELECT name FROM users WHERE id=?", [$id], "i"); 

ваши другие функции должны быть изменены, а также.

class DB{ 

    public $con; 

    function __construct() 
    { 
     $this->con = new mysqli("localhost", "root", "", "proba_fferenc"); 
    } 

    public function select(...) 
    { 
     // as shown above 
    } 
} 
+0

Это хорошо, чем xx, но где у меня есть память. Он не имеет доступа к функции get_result(). Как я могу использовать его с bind_result()? – PumpkinSeed