首页 > 解决方案 > 未捕获的错误:在布尔值上调用成员函数 prepare() ... 堆栈跟踪:#0 {main} throw in

问题描述

我正在尝试使用 Ajax 和 PHP 在不刷新页面的情况下发送我的输入数据数据库。但是我收到了这个错误,我已经花了几个小时来解决这个问题,但我仍然不能。请帮我。谢谢!

这是我放置 ajax 脚本和 html 代码的 index.php 文件。

  $(document).ready(function() {
    $('#myForm').submit(function(event) {
      event.preventDefault();
      $.ajax({
        url: 'insert.php',
        method: 'post',
        data: $('form').serialize(),
        dataType: 'text',
        success: function(strMessage) {
          $('#result').text(strMessage);
          $('#myForm')[0].reset();
        }
      });
    });
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h5 class="alert-heading">
  ADD INFORMATION
</h5>
<hr>
<form id="myForm" method="post" action="">
  <div class="form-group">
    <label>Full name</label>
    <input type="text" autofocus="on" class="form-control" name="fullname" placeholder="Enter your name here" required>
  </div>
  <div class="form-group">
    <label>Address</label>
    <input type="text" class="form-control" name="address" placeholder="Address" required>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

</div>

<div class="alert alert-success" role="alert" id="result"></div>

这是我的 insert.php 文件

<?php 


    try {

        include_once 'classes/Db.php';

        $fullname = addslashes($_POST['fullname']);
        $address = addslashes($_POST['address']);

        $sql = "INSERT INTO users (null, fullname, address) VALUES ('$fullname', '$address')";
        $stmt = $conn->prepare($sql);
        $stmt->execute();

    } catch (PDOException $e) {
        echo "ERROR IN INSERTING DATA! : " . $e->getMessage();
    }

?>

还有我的 classes/Db.php 文件

<?php       

    $localhost = 'localhost';
    $dbname = 'test_icon';
    $username = 'root';
    $password = '';

    try {

        $sql = 'mysql:localhost=' .$localhost. '; dbname=' .$dbname;
        $stmt = new PDO($sql, $username, $password);
        $conn = $stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch (PDOException $e) {
        echo "CONNECTION FAILED: " .$e->getMessage(). '<br/>';
        die();
    }

?>

标签: phppdo

解决方案


当您创建 PDO 实例时,您正在设置连接,其结果setAttribute是一个布尔值,指示函数是否成功。您应该将其设置为构造函数的输出:

$conn = new PDO($sql, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

推荐阅读