PHP中的变量范围

时间:2010-10-01 05:12:50

标签: php scope

我的php有问题。以下代码生成错误“PHP警告:mysqli_close()期望参数1为mysqli,在包含mysqli_query

的行上给出[...]”
<html>
<head>
<?php
    $table = "prjsuggestions";
    /$mysqli = NULL;
    if(!empty($_POST['posttext'])){
        $pnameempty = empty($_POST['postname']);
        $ynameempty = empty($_POST['name']);
        if($pnameempty || $ynameempty){
        }
        else{
            $mysqli = new mysqli("localhost", "progclub", "", "progclub");
            if(mysqli_connect_errno()){
                printf("Connect failed: %s\n", mysqli_connect_error());
                exit();
            }
            //successful query normally occurs here but code fails w/ or /wo it.
        }
    }
    else{
       printf("No information posted.");
    }
?>
<title>Bucknell Programming Club</title>
</head>
<body>
    <span id="posts">
<?php
    $offset = 0;
    $query = "SELECT * FROM {$table}";
    $result = mysqli_query($mysqli, $query);
    if($result !== FALSE){
        //while(($post = mysqli_fetch_assoc($result)) !== NULL){
            echo mysqli_num_rows($result);
            $post = mysqli_fetch_assoc($result);
            $author = $post['name'];
            printf("Author: %s\n", $author);
            echo "<br />";
            printf("Post title: %s\n", $post['title']);
            echo "<br />";
            printf("%s\n", $post['text']);
            echo "<hr />";
        //}
    }
    else printf("oh nooo!");
    mysqli_free_result($result);
    mysqli_close($mysqli);
?>
    </span>
</body>
</html>

请注意,所有查询都已检出并在phpmy中正常工作,并且原始代码包含一个先前的查询,该数据将数据添加到'base,这也绝对有效。

我已经尝试了静态和全局的各种组合,我已经在变量范围的PHP页面上看了一下,唉我在这个上下文中并不完全理解它(特别是考虑到我无法使我的代码工作)。有人可以告诉我这里的不同范围吗?我认为不应该有任何!!

2 个答案:

答案 0 :(得分:3)

查看 documentation (特别是示例1)。有一些类似于你的例子。

以下内容应该有效,它与您的代码类似:

请注意mysqli_query()的第一个参数实际上是您的变量$mysqli 。你可能试图在那里放些东西。

此外,请务必检查您的连接,如下面的代码所示:

<html>
<head>    
<?php
    $mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");
?>
</head>
<body>
<?php

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Use $mysqli */
if (mysqli_query($mysqli, "/* ... MySQL goes here... */") === TRUE) {
    /* Success! */
}

mysqli_close($mysqli);
?>
</body>
</html>

答案 1 :(得分:0)

OOOOOOOOOOoooooooooooooooooohh。 D'哦。是啊。范围。也许我应该有更多关于变量只在写入数据时初始化的事实。哎呀。谢谢你们。