编辑:添加了文件的其余部分。
我正在为我的项目开发一个Database类。但是,我遇到了mysqli的困难。代码使其“输入查询”但从未使其“测试”,并且不会抛出任何错误。我不确定发生了什么。我是PHP新手,顺便说一句。
<?
class Database {
private $connect;
function __construct($host, $user, $password, $database) {
$this->connect = new mysqli($host, $user, $password, $database);
if (mysqli_connect_errno()) {
printf("Connection failed: %s\n", mysqli_connect_errno());
} else {
printf("Connect succeded!");
}
}
function __destruct() {
mysqli_close($connect);
printf("Connection closed.");
}
public function query($query) {
printf("entered query");
if ($stmt = $connect->prepare($query)) {
printf("test");
mysqli_stmt_execute($stmt);
foreach (mysqli_stmt_fetch($stmt) as $result) {
printf($result + "\n");
}
} else {
printf("something went wrong..");
}
mysqli_stmt_close($stmt);
}
}
?>
“测试”错误之后很可能发生这种情况。我不在那里,但是:P
答案 0 :(得分:2)
JMack是正确的,你需要选择程序或面向对象的枯萎。根据你的代码,我会说你试图去OOP路线让两个人感到困惑。这是我输入的OOP设计的一个例子。接受它并从中学习。
您的CLASS延期:
class MyObject {
private $mysqli;
// Open your connection
public function __construct()
{
$this->mysqli = new mysqli(
'host',
'username',
'password',
'database'
);
}
// Close your connection after execution
public function __destruct()
{
$this->mysqli->close();
}
// Your query function, with some minor changes/improvements
public function query($query)
{
if($sql = $this->mysqli->prepare($query))
{
$sql->execute();
foreach($sql->fetch() as $result)
{
printf("%s\n", $result);
}
} else {
printf("Something went wrong: %s", $sql->error);
}
$sql->close();
}
}
使用对象:
$Result = new MyObject();
$Result->query("SELECT `id` FROM `table`");
答案 1 :(得分:0)
嗯......我在这里看到了很多错误......但是,让我们从你文件的最开头开始,确保显示所有错误:
error_reporting(E_ALL | E_STRICT);
我立即看到你使用mysqli的第二个问题。您试图在oo和过程样式中使用mysqli。你想要使用其中一个。交换以下行:
替换
if ($stmt = $mysqli->prepare($query)) {
与
if ($stmt = mysqli_prepare($link, $query)) {
您在哪里建立数据库连接?您似乎没有在任何地方传递链接资源。如果你的连接没有传递到你的类实例,那么它永远不会成功,因为它超出了范围。