Mysqli Prepare 语句 - 返回 False,但为什么呢? [英] Mysqli Prepare Statement - Returning False, but Why?

查看:17
本文介绍了Mysqli Prepare 语句 - 返回 False,但为什么呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数,它根据要插入到该列中的列名和值的关联数组以及一个表名(一个简单的字符串)生成一个准备好的 INSERT 语句:

I have a function that generates a prepared INSERT statement based on an associative array of column names and values to be inserted into that column and a table name (a simple string):

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,但没有给我一个原因!

My problem is that $this->conn->prepare (it's part of a class, conn is a NEW mysqli object, which works with no issues) returns false, but does not give me a reason why!

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

Here is a sample $sqlString that gets built for the prepare statement:

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

有人能看出这个参数化语句有什么问题吗?准备函数返回 false 的任何原因?

Can anyone see a problem with this parameterized statement? Any reason the prepare function would return false?

推荐答案

我正在将解决方案复制到此答案中,以便可以对此进行投票,否则该问题将永远出现在未回答的问题"中.我将这个答案标记为 CW,所以我不会得到任何分数.

I'm copying the solution into this answer so this can be given an upvote, otherwise the question will appear in the "unanswered questions" forever. I'm marking this answer CW so I won't get any points.

@Andrew E. 说:

@Andrew E. says:

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

I just turned on mysqli_report(MYSQLI_REPORT_ALL) to get a better understanding of what was going on - turns out that one of my field names was incorrect - you'd think that prepare() would throw an exception, but it fails silently.

这篇关于Mysqli Prepare 语句 - 返回 False,但为什么呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆