我有一个函数,它根据要插入到该列中的列名和值的关联数组以及一个表名(一个简单的字符串)生成一个准备好的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 - <!> gt; conn - <!> gt; prepare(它是一个类的一部分,conn是一个新的mysqli对象,它没有问题)返回false,但是没有给出我有理由!

以下是为prepare语句构建的示例$ sqlString:

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

有人能看到这个参数化语句有问题吗? prepare函数返回false的原因是什么?

有帮助吗?

解决方案

我正在将解决方案复制到这个答案中,因此可以给予一个upvote,否则问题将出现在<!>“未答复的问题<!>”中;永远。我将这个答案标记为CW,所以我不会得到任何积分。

@Andrew E.说:

  

我刚打开   mysqli_report(MYSQLI_REPORT_ALL)到   更好地了解是什么   继续 - 证明了我的一个   字段名称不正确 - 你的   认为prepare()会抛出一个   异常,但它无声地失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top