Mysqli准备陈述-返回假,但为什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (9)

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

下面是为准备语句构建的示例$sqlString:

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

有人能看到这个参数化语句的问题吗?准备函数会返回false的原因吗?

提问于
用户回答回答于

我把解决方案复制到这个答案中,这样就可以进行投票,否则问题将永远出现在“未回答的问题”中。我正在标记这个答案CW,所以我不会得到任何分数。

我刚打开mysqli_report(MYSQLI_REPORT_ALL)为了更好地了解发生了什么事-原来我的一个字段名是不正确的-你会认为prepare()会抛出一个异常,但它无声地失败了。

扫码关注云+社区