【发布时间】:2017-07-12 07:54:51
【问题描述】:
所以在参考 w3schools 后,我正在 PDO 尝试一个项目,但我不断收到此错误
在布尔值上调用成员函数 bindParam()
这是我的代码。我不知道是什么原因造成的
if (isset($data->title) && isset($data->content) && isset($data->lang) && isset($data->show_on_site)) {
$response = array();
try {
$sql = 'INSERT INTO newsposts
(heading, content, author, language,show_on_page)
VALUES (:title, :content,:author,:lang,:show_on_site)';
$stmt = $db->prepare($sql);
$stmt->bindParam(':title', $db->real_escape_string($data->title), PDO::PARAM_STR);
$stmt->bindParam(':content', $db->real_escape_string($data->content), PDO::PARAM_STR);
$stmt->bindParam(':author', $_SESSION['user_session'], PDO::PARAM_STR);
$stmt->bindParam(':lang', $db->real_escape_string($data->lang), PDO::PARAM_STR);
$stmt->bindParam(':show_on_site', $db->real_escape_string($data->show_on_site), PDO::PARAM_BOOL);
if ($stmt->execute()) {
header_status(200);
$response['status'] = 'Success';
$response['message'] = 'Post Inserted';
} else {
header_status(400);
$response['status'] = 'Error';
$response['message'] = 'Something went wrong';
}
echo json_encode($response);
} catch (exception $e) {
header_status(503);
$response['status'] = 'Error';
$response['message'] = $e->getMessage();
echo json_encode($response);
}
【问题讨论】:
-
如果
prepare()失败,它可能会返回FALSE。我认为这是原因,但不明白为什么会失败...... -
尝试将
$stmt->bindParam(':show_on_site', $db->real_escape_string($data->show_on_site), PDO::PARAM_BOOL);更改为$stmt->bindParam(':show_on_site', $db->real_escape_string($data->show_on_site), PDO::PARAM_STR); -
你在哪里定义
$db和在准备之前你有没有像if($db instanceof PDO)这样的支票? -
错误与
$db有关。未与数据库建立连接,因此连接函数返回false。这就是导致错误的原因。 -
@UsagiMiyamoto 是的,你是对的,
$db->prepare($sql)部分返回 false。但为什么会这样呢?
标签: php mysql pdo prepared-statement