Mysqli准备错误或其他什么

时间:2012-11-28 19:26:19

标签: php mysqli

编辑:添加了文件的其余部分。

我正在为我的项目开发一个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

2 个答案:

答案 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)) {

您在哪里建立数据库连接?您似乎没有在任何地方传递链接资源。如果你的连接没有传递到你的类实例,那么它永远不会成功,因为它超出了范围。