Mysqli подготовить заявление - возвращение неверно, но почему? - PullRequest
18 голосов
/ 03 августа 2009

У меня есть функция, которая генерирует подготовленный оператор 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;
    }

Моя проблема в том, что $ this-> conn-> prepare (это часть класса, conn - это НОВЫЙ объект mysqli, который работает без проблем) возвращает false, но не дает мне причины, почему!

Вот пример $ sqlString, который создается для оператора prepare:

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

Может кто-нибудь увидеть проблему с этим параметризованным оператором? Любая причина, по которой функция prepare возвращает false?

1 Ответ

49 голосов
/ 03 августа 2009

Я копирую решение в этот ответ, чтобы его можно было поднять, в противном случае вопрос появится в «неотвеченных вопросах» навсегда. Я отмечаю этот ответ CW, поэтому я не получу никаких баллов.

@ Эндрю Э. говорит:

Я только что включил mysqli_report(MYSQLI_REPORT_ALL) до получить лучшее понимание того, что было происходит - оказывается, что один из моих неправильные имена полей думаю, что prepare() бросил бы исключение, но оно молча терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...