我正在尝试设置一个带有数据库链接的基本购物车应用程序。显然,我在代码顶部设置了连接:
$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();
}
传递给?我不确定。
任何帮助将不胜感激!
答案 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;
进入功能。它不需要在函数外部的代码中。