将$ conn变量传递给函数时遇到问题

时间:2014-12-14 22:34:00

标签: php mysql

我正在尝试设置一个带有数据库链接的基本购物车应用程序。显然,我在代码顶部设置了连接:

        $dsn = "mysql:dbname=MYDATABASE";
        $username = "root";
        $password = "MYPASSWORD";
        try {
            global $conn;
            $conn = new PDO( $dsn, $username, $password );
            $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        } catch ( PDOException $e ) {
          echo "Connection failed: " . $e->getMessage();
        }

然后我迈出了第一步,要求提供各种信息,然后将其保存到数据库中。我这样做的方式如下:

            function processStep1() {
            $_SESSION["firstname"] = $_POST["firstname"];
            $_SESSION["lastname"] = $_POST["lastname"];
            $_SESSION["address"] = $_POST["address"];
            $_SESSION["city"] = $_POST["city"];
            $_SESSION["state"] = $_POST["state"];
            $_SESSION["zip"] = $_POST["zip"];


            $sql = "INSERT INTO customers VALUES ( '" . $_SESSION["firstname"] . "', '" . $_SESSION["lastname"] . "', '" . $_SESSION["address"] . "', '" . $_SESSION["state"] . "', '" . $_SESSION["city"] . "', '" . $_SESSION["zip"] . "' );";

            try {
              $conn->query( $sql );
            } catch ( PDOException $e ) {
              echo "Query failed: " . $e->getMessage();
            }

            displayStep2();
        }

然而,当我运行此页面时,我收到错误:

  

"注意:未定义的变量:conn"以及"致命错误:在非对象上调用成员函数query()"。

我确实设法在线阅读这是因为$conn没有传递给函数,但我不知道如何传递它,因为我调用函数的方法{{1}如下:

processStep1()

为了以简化的方式促进多页面系统,它只需在提交表单时检查步骤编号,然后使用call_user_func组装函数调用,那么我如何将 if ( isset( $_POST["step"] ) and $_POST["step"] >= 1 and $_POST["step"] <= 5 ) { call_user_func( "processStep" . (int)$_POST["step"] ); } else { displayStep1(); } 传递给?我不确定。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

更改函数以$conn作为参数:

function procesStep1($conn) {
    ...
}

并在调用时传递参数:

call_user_func("processStep" . (int)$_POST["step"], $conn);

此外,在现代版本的PHP中,您不需要使用call_user_func,您可以使用变量函数:

$processStep = "processStep" . (int)$_POST["step"];
$processStep($conn);

如果您不想更改此类所有功能,可以输入

global $conn;

进入功能。它不需要在函数外部的代码中。