我试图以面向对象的方式使用mysqli,这是代码:
class conect {
function populate( ) {
while ($row = $this->result->fetch_object()) { $this->data[] = $row; }
$this->result->close();
}
function conect( ) {
$mysqli = new mysqli('localhost', 'root', 'root', 'todo');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
};
}
function register($name, $email, $password ) {
$mysqli->query("INSERT INTO user (name, email, password)
VALUES ('$name', '$email', '$password')");
}
}
寄存器功能是问题,如果我在conect()函数中添加该查询它确实有效,但因为它不起作用,所以不会显示错误
我一直在努力学习面向对象的php和mysqli。我已经设法使用上面的风格来创建一个动态的投资组合,但这是我第一次尝试写入数据库所以我不知道这是什么问题
希望你能帮忙
谢谢
答案 0 :(得分:0)
您不会显示任何错误,因此,难怪没有显示错误。
$sql = "INSERT INTO user (name, email, password) VALUES ('$name', '$email', '$password')";
if (!$mysqli->query($sql)) {
trigger_error($mysqli->error);
}
但是,为了让您知道,您的代码无论如何都与mysqli和oop无关。
答案 1 :(得分:0)
问题是您的$mysqli
方法中的变量register()
未定义。这也意味着您无法从“无”调用任何方法。在脚本顶部添加error_reporting(E_ALL);
以查看有关未定义变量的警告。
要解决此问题,您需要将MySQLi对象保存在对象字段中,并使用$this->mysqli
或sth访问它。这样您就可以在connect()
方法中进行设置,并在register()
方法中使用它。