2015-12-27 4 views
2

Я не очень уверен, как использовать mysqli внутри классов, поскольку я привык к процедурному программированию, но я понимаю, где ООП полезен. Поэтому я пытаюсь создать функцию обновления в своем классе с помощью mysqli, но, похоже, она не работает. Я также не могу понять, как заставить его отображать ошибки. Он просто говорит мне, что это:Ошибка Mysqli в классе

mysqli_error() ожидает параметр 1, чтобы быть MySQLi

Это объект:

$mysqli = new mysqli('localhost', 'root', '', 'ams'); 
$part = new Part($mysqli); 

Вот мой класс:

class Part { 

    protected $mysqli; 

    // Editable Part table titles 
    protected $editable = array('Desc', 'SDQty', 'IAQty', 'IsActive'); 


    function __construct($mysqli) { 
     $this->mysqli = $mysqli; 
    } 


    function update($data = array(), $partID) { 

     $r_errors = 0; 

     // Data Arrays 
     $updateArray = array(); 

     // Loop Though all the column titles 
     foreach ($data as $column => $value) { 

      // If the column value is set 
      if ((isset($column) && !empty($column)) && (isset($value) && !empty($value))) { 

       // If the item to be updated is allowable from the allowable array || add it to the column array 
       if (in_array($column, $this->editable)) { 
        $updateArray[] = "$column = $value"; 
       } 

      } 

     } // End of foreach loop 


     // Convert Data Arrays to strings 
      $updateData = implode(', ', $updateArray); 

     // Create the SQL string 
      $_query = "UPDATE parts WHERE PartID = $partID SET $updateData"; 
      $result = $this->mysqli->query($_query); 

      if (!$result) { 
       echo mysqli_error($result); 
      }  
    } 

Он не будет запускать запрос и я вроде начинающего в этом ООП с php и mysql, поэтому любая помощь gr похвалил.

+1

'mysqli_error ($ MySQLi)' (Примечание: '$ mysqli' - это просто имя. Но, похоже, это одно и то же). Вы уверены в этом вопросе? Не должно быть что-то вроде этого: '' UPDATE parts SET column_name = $ updateData WHERE PartID = $ partID "' – FirstOne

+0

OMG Спасибо! как только я положил его туда, он произвел тонну чувственного смысла, а это не результат! –

+0

И да, как только я изменил свой запрос, он работал нормально.Спасибо –

ответ

3

У вас есть неправильно запроса, вместо:

UPDATE parts WHERE PartID = $partID SET $updateData; 

Он должен быть (обратите внимание на порядок вещей):

UPDATE parts SET column_name = 'column_data' WHERE PartID = $partID; 

Посмотрите на UPDATE Syntax для получения дополнительной информации.


об ошибке:

mysqli_error() ожидает параметр 1, чтобы быть MySQLi

Поскольку $mysqli является переменная, которая держит ваш MySQLi, это тот, который должен быть использован:

echo mysqli_error($mysqli); 

Примечание: я не знаю, где эти данные приходят, но в случае, если это пользовательский ввод, вы обязательно должны взглянуть на How can I prevent SQL-injection in PHP?

+0

так ранее в моей функции я просто изменил ее на этот $ updateArray [] = "' $ column' = '$ value' "; и теперь он отлично работает с выводом ошибок. Благодаря! –

2

Неверная строка echo mysqli_error($result);. Вы пытаетесь передать результирующий набор в качестве параметра.

Что вам нужно, так это;

echo $mysqli->error(); 

, чтобы сохранить правильный синтаксис OO.

У вас может быть mysqli_error($mysqli), но это процедурный синтаксис.

+0

@JoeyFilmeier См. [Этот ответ] (http://stackoverflow.com/a/26476208/3899908) для обзора синтаксисов mysqli для миграции из mysql. – worldofjr

+0

Разве это не комментарий к части ошибки? Существует проблема с запросом на обновление ... (Нет, если у вас нет ни одного смещения, на случай, если вы попадете на ^^) – FirstOne

+0

@FirstOne Это ответ, который исправляет код, который позволяет показывать ошибку SQL - не делает этого неверный ответ - но по мере того, как ваш ответ будет более полным, я буду избегать его! – worldofjr