我是PHP的新手,但这是我的代码,而且我得到了:
致命错误:未捕获错误:在布尔值
上调用成员函数bindParam()
我已经过测试和测试,不知道出了什么问题,有些指针确实有助于继续前进 - 先谢谢。
$url_slot = parse_url($str);
$urlArray = explode('/',$url_slot['path']);
$passid = $urlArray['11']; // serial no
$deviceId = $urlArray['8'];
$passtype = $urlArray['10'];
$servername = "host";
$username = "user";
$password = "******";
$dbname = "db";
try {
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO Registrations (device_id, pass_id, pass_type) VALUES
(:device_id,:pass_id,:pass_type,:created,:modified)");
$stmt->bindParam(':device_id',$device_id);
$stmt->bindParam(':pass_id',$pass_id);
$stmt->bindParam(':pass_type',$pass_type);
$device_id = $deviceId;
$pass_id = $passid;
$pass_type = $passtype;
$stmt->execute();
$conn = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
try {
$conn = new mysqli($servername, $username, $password, $dbname);
$stmt = $conn->prepare("INSERT INTO Devices (push_token) VALUES
(:push_token)");
$stmt->bindParam(':push_token',$push_token);
$push_token = $content['pushToken'];
$stmt->execute();
$conn = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
任何帮助都会很棒。
答案 0 :(得分:1)
每当您因为向函数发送错误类型而出现致命错误时,请打印您要在有罪行上传递的参数。
每当错误的类型是布尔值时,检查是否为每个函数返回写了测试,如果函数失败,可能会损害你的程序,因为一个变量包含一个布尔值,当它通常不应该因为函数这使得该值失败并返回false
。
在你的情况下,它更简单:错误并没有告诉你你试图将一个布尔值传递给等待另一种类型的函数,它告诉你你尝试调用方法bind_param()
,这意味着您将布尔值视为对象。
$stmt->bindParam(':device_id',$device_id);
因此,$stmt
为空。
$stmt = $conn->prepare("INSERT INTO Registrations (device_id, pass_id, pass_type) VALUES (:device_id,:pass_id,:pass_type,:created,:modified)");
将您指定给$stmt
的值作为该值的函数返回给我,我建议您在设置$stmt
之后测试false
是否与$conn
不同,并打印错误类型和来自singleHttpRequest
的消息,如果不是。
除此之外,我感觉你还没有习惯使用API,你似乎缺乏一些经验,并且在使用MySQLi时也试图使用PDO异常。也许你应该花一些时间阅读他们各自的文档。
Stack Overflow也充满了关于这两者的各种问题和文档。