سؤال

ولقد وظيفة التي تولد بيان INSERT استعداد استنادا إلى مجموعة النقابي من أسماء الأعمدة والقيم الواجب إدراجها في هذا العمود واسم الجدول (سلسلة بسيطة):

function insert ($param, $table) {
        $sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
        if ($statement = $this->conn->prepare($sqlString)):
            $parameters = array_merge(array($this->bindParams($param), $param));
            call_user_func_array(array($statement, 'bind_param', $parameters));
            if (!$statement->execute()):
                die('Error! '.$statement->error());
            endif;
            $statement->close();
            return true;
        else:
            die("Could Not Run Statement");
        endif;
    }

ومشكلتي هي أن $ هذا-> conn-> إعداد (انها جزء من فئة، كون هو كائن mysqli جديد، والذي يعمل مع أي قضايا) إرجاع كاذبة، ولكن لا يعطيني سببا لماذا!

وهنا هو sqlString عينة $ أن يحصل بنيت لبيان التحضير:

INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)

ويمكن لأي شخص أن يرى مشكلة مع هذا البيان معلمات؟ لأي سبب كان فإن وظيفة إعداد عودة كاذبة؟

هل كانت مفيدة؟

المحلول

وأنا نسخ الحل في هذه الإجابة لذلك يمكن أن تعطى upvote، وإلا ستظهر السؤال في "علامات الاستفهام" إلى الأبد. أنا بمناسبة هذه الإجابة CW لذا فإنني لن تحصل على أي نقطة.

وAndrew E. يقول:

<اقتباس فقرة>   

والتفت فقط على   mysqli_report(MYSQLI_REPORT_ALL) ل   الحصول على فهم أفضل لما كان   يحدث - على تبين أن واحدة من بلدي   وكانت أسماء الحقول غير صحيحة - يمكنك كنت   أعتقد أن prepare() أن بطرح   استثناء، ولكنه فشل في صمت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top