【发布时间】:2018-08-02 18:38:07
【问题描述】:
你能告诉我我做错了什么吗?
我有一个在数据库中添加 users_id、attribute_id 和用户输入答案的函数。 在那之前它可以工作。但是,当我添加 ON DUPLICATE KEY UPDATE 部分以更新用户答案而不是创建新答案时,它会引发错误:
致命错误:未捕获的错误:调用布尔值中的成员函数 execute() ......\Attributes.php 第 39 行
在那一行我有 $add_user->execute();
下面添加了插入数据库的功能。如果我删除“重复更新”部分,它将插入数据库并且一切正常,但我需要如果用户已经回答它,它会更新现有的而不是在数据库中插入新数据:
public function updateAttributes($attribute_id, $attribute_text) {
$dbobj = new Connection();
$connection = $dbobj->getConnection();
$user_id = $_SESSION['id'];
$_attribute_id = mysqli_real_escape_string($connection, $attribute_id);
$attribute = mysqli_real_escape_string($connection, $attribute_text);
$add_user = $connection->prepare("INSERT into user_answers(user_id, attribute_id, answer) VALUES ('$user_id', '$_attribute_id', '$attribute') ON DUPLICATE KEY UPDATE answer = VALUES(answer) WHERE user_id = VALUES(user_id) AND attribute_id = VALUES(attribute_id)");
//$add_user->bind_param('iis', $user_id, $_attribute_id, $attribute);
// ON DUPLICATE KEY UPDATE user_answer = VALUES(answer) WHERE user_id = VALUES(user_id) AND attribute_id = VALUES(attribute_id)
$add_user->execute();
$add_user->close();
$connection->close();
}
如果需要,这里是 sql 代码。包含两个外键和答案,存储用户输入的答案:
CREATE TABLE IF NOT EXISTS `user_answers` (
`user_id` int(11) DEFAULT NULL,
`attribute_id` int(11) DEFAULT NULL,
`answer` varchar(50) DEFAULT NULL,
KEY `user_id` (`user_id`),
KEY `attribute_id` (`attribute_id`),
CONSTRAINT `attribute_id` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`id`),
CONSTRAINT `user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
更新:添加连接类:
class Connection {
public function getConnection(){
$conn = mysqli_connect("localhost","root","","dbname") or die("Couldn't connect");
$conn->query("SET NAMES utf8");
return $conn;
}
}
编辑
更新代码后我遇到了这个问题:
下面添加了插入数据库的功能。如果我删除“重复更新”部分,它将插入数据库并且一切正常,但我需要如果用户已经回答它,它会更新现有的而不是在数据库中插入新数据:
公共函数 updateAttributes($attribute_id, $attribute_text) { $dbobj = 新连接(); $connection = $dbobj->getConnection();
$user_id = $_SESSION['id'];
$_attribute_id = mysqli_real_escape_string($connection, $attribute_id);
$attribute = mysqli_real_escape_string($connection, $attribute_text);
$add_user = $connection->prepare("INSERT into user_answers(user_id, attribute_id, answer) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE answer = VALUES(answer)");
$add_user->bind_param('iis', $user_id, $_attribute_id, $attribute);
$add_user->execute();
$add_user->close();
$connection->close();
}
【问题讨论】:
-
Connection类的邮政编码...$connection->prepare()似乎返回布尔值