【问题标题】:$mysqli->prepare returns false if data fields are blank如果数据字段为空,$mysqli->prepare 返回 false
【发布时间】:2013-09-07 14:49:33
【问题描述】:

表单中有 4 个字段,其中 2 个允许为空,因此如果用户不填写这些字段,INSERT 将失败,因为$mysqli->prepare 将返回 false。

电子邮件地址和电话号码不在以下表格中。

那么,有没有什么方法可以发送空白字段并仍然为其他填充字段插入数据。

function newcontact()
    {
        $mysqli = connect();
        $query = "INSERT INTO contacts( first_name, last_name, email, phone_no, contact_by )Values( '$this->first_name', '$this->last_name',
                    '$this->email', $this->phone, $this->user_id)"; 
        //die( $query );
        $stmt = $mysqli->prepare( $query );
        if( $stmt->execute() )
        {
            $mysqli->close();
            return true;
        }
    }

【问题讨论】:

  • 为什么要使用$mysqli->prepare?
  • 我将它用作对象。函数 connect() 返回新的 mysqli(.....) 对象。
  • 虽然问题是“你为什么使用它”
  • 好的,我暂时没有使用绑定参数,只是想测试查询。
  • 继续,使用绑定参数,错误就会消失

标签: php mysql mysqli


【解决方案1】:
  • 如果用户不填写这些字段,则不会输入 NULLS 而是 空字符串
  • 从而导致语法错误,因为Values('', '', '', , ) 是肯定的错误。
  • 您使用的准备方式错误。
  • 您没有设置 mysqli 错误报告

在 mysqli_connect 之前添加这一行

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

并让您的查询实际使用占位符并绑定参数。

一切都会好起来的。但如果不是,您将收到确切错误的通知。

【讨论】:

  • 我正在尝试 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);在其他一些查询上,但它返回布尔值。我怎样才能看到实际的消息。
  • 您应该在连接之前调用此运算符不是在查询中,而只是一次
【解决方案2】:

当使用准备好的语句时,您不会将值放入查询中,而是提供占位符并绑定参数。

http://php.net/manual/en/mysqli.prepare.php

如果您想将值放入查询中,请使用函数query() http://www.php.net/manual/en/mysqli.query.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多