2014-09-27 2 views
-2

Я пытаюсь использовать метод обновления внутри моего класса базы данных, где я мог бы обновить запись. Я пытаюсь убедиться, что я могу использовать этот метод в другом экземпляре, где мне не нужно повторять запись того же утверждения. Вот мой код:PDO Подготовленный оператор Внутри класса

<?php 
require 'init.php'; 
class Database { 
    private $conn; 

    public function __construct() { 
     try { 
      $this->conn = new PDO('mysql:host=localhost;dbname=school', DB_USER, DB_PASS); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $e) { 
      return false; 
     } 
    } 

    public function update($table, $key, $value, $id) { 
     $stmt = $this->conn->prepare("UPDATE $table SET $key = $value WHERE id = :id"); 
     return $stmt->execute(array($key => $value, 'id' => $id)); 
    } 
} 
$database = new Database(); 

Моя проблема в том, я получаю некоторые ошибки, когда я пытаюсь создать экземпляр класса $result = $database->update('admin', 'username', 'golobo', 13); вопрос, что я делаю неправильно?

Благодаря

+0

Какие фактические значения используются для '$ table' и' $ key' и '$ value'? Кроме того, расскажите нам о реальных ошибках, которые вы получаете; это важно. Являются ли эти фактические и постоянные значения '' admin ',' username ',' golobo ', 13' передаются? –

+0

Если вы пытаетесь передать значение, содержащее пробел, дефис, апостроф и т. Д., Или что может быть [** зарезервированное ключевое слово **] (http://dev.mysql.com/doc/refman/ 5.5/en/reserved-words.html), то это создаст проблему. Вам нужно было бы обернуть ваши переменные в backticks '\' ' –

+0

Фактически я пытался проверить эти значения' useename, golobo, 13' для проверки объекта. @ Fred-ii- – Babangida

ответ

1

Вы не используете привязки особенность PDO совсем правильно. Вы должны сделать что-то вроде следующего:

public function update($table, $key, $value, $id) { 
    $stmt = $this->conn->prepare(
     "UPDATE $table SET $key = :value WHERE id = :id" 
    ); 
    return $stmt->execute(array(
     ':value' => $value, 
     ':id' => $id 
    )); 
} 

Во-первых, вам нужно поместить всю строку на обязательность в ключе привязки массива. Итак, вы положили ':id', а не 'id'. Также вы помещали переменные непосредственно в запрос в случае $table и $value, но затем пытались связать их друг с другом, что не имеет смысла.

Редактировать: имена таблиц и столбцов не могут быть связаны с использованием PDO.

+0

fyi: нет, вы не можете привязывать таблицы/столбцы, вы можете их переименовывать, но – Ghost

+0

. Ред. – gandaliter

+0

уверен, что мужчина не пострадал, просто дополнительная информация – Ghost

Смежные вопросы