类中的Mysqli错误

时间:2015-12-27 22:14:18

标签: php mysql mysqli

我不太确定如何在类中使用mysqli,因为我习惯于程序编程,但我知道OOP在哪里是有益的。所以我正在尝试使用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);
            }       
    }

它不会运行查询,我在这个OOP的初学者使用php和mysql所以任何帮助都非常感谢。

2 个答案:

答案 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?

答案 1 :(得分:2)

echo mysqli_error($result);行不正确。您正在尝试将结果集作为参数传递。

你应该拥有的是什么;

echo $mysqli->error();

保持正确的OO语法。

您可以拥有mysqli_error($mysqli),但这是程序语法。