php - 未捕获的错误:在布尔值上调用成员函数 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();
}
?>
解决方案
当您创建 PDO 实例时,您正在设置连接,其结果setAttribute
是一个布尔值,指示函数是否成功。您应该将其设置为构造函数的输出:
$conn = new PDO($sql, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
推荐阅读
- c# - STARS.Web.csproj' 以 'net471' 为目标。以 '.NETStandard,Version=v2.0' 为目标的项目不能引用它
- spring-boot - 支持 MQTT 的 API 网关 (IOT)
- docker - 如何为其他 Docker 容器和堆栈制作 Docker VPN 网关?
- svn - svnsync 错误 - 目录 xxx 已过期
- r - 分别获取密码子内同义和非同义核苷酸位置的范围
- javascript - NPM包Concurrently真的执行并行执行否则如何执行并行执行
- symfony - Symfony 4,为多对多关系上下文中的 findby 自定义方法提供简单示例
- ruby-on-rails - Rspec 组测试输出
- node.js - 如何以 zipkin ui 支持的格式(json)将 zipkin 跟踪写入文件?
- ansible - 脚本中的 Ansible 变量