duanbianweng5353 2015-12-27 22:14
浏览 49
已采纳

类中的Mysqli错误

Im not really sure how to use mysqli inside of classes as I'm used to procedural programming but I understand where OOP is beneficial. So I'm trying to create an update function in my class using mysqli but it does not seem to be working. I also cannot figure out how to get it to echo out errors. It just tells me this:

mysqli_error() expects parameter 1 to be mysqli

This is the object:

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

Here is my class:

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);
            }       
    }

It will not run the query and Im kind of a beginner at this OOP with php and mysql so any help is greatly appreciated.

  • 写回答

2条回答 默认 最新

  • douxiong3245 2015-12-27 22:23
    关注

    You have your query wrong, instead of:

    UPDATE parts WHERE PartID = $partID SET $updateData;
    

    It should be (note the order of things):

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

    Take a look at UPDATE Syntax for more information.


    About the error :

    mysqli_error() expects parameter 1 to be mysqli

    Since $mysqli is the variable that holds your mysqli, that's the one that should be used:

    echo mysqli_error($mysqli);
    

    NOTE: I don't know where this data is coming from, but in case it's user input, you should definitely take a look at How can I prevent SQL-injection in PHP?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)