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

查看:338
本文介绍了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!

以下是为prepare语句构建的示例$ 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 (?, ?, ?, ?, ?, ?, ?, ?, ?)

有人可以看到此参数化语句有问题吗?有什么原因使prepare函数返回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天全站免登陆