我正在努力使用PHP和SQL Server 2008中的输出参数。我不断收到错误:
注意:未定义的变量:第67行的C:\ inetpub \ wwwroot \ PersonalWebsitePHP \ Register.php中的UserID执行statementArray时出错([0] =>数组([0] => IMSSP [SQLSTATE] =&gt ; IMSSP [1] => -7 [code] => -7 [2] =>指定了无效的PHP类型作为输出参数。不能将DateTime对象,NULL值和流指定为输出参数。 [message] =>指定了无效的PHP类型作为输出参数。不能将DateTime对象,NULL值和流指定为输出参数。))
我的代码:
$con = sqlsrv_connect(".\SQLExpress", $connectionInfo);
if ($con === false) {
echo "Could not connect \n";
die(print_r(sqlsrv_errors(), true));
}
$params = array(
array($_POST["FirstName"], SQLSRV_PARAM_IN),
array($_POST["LastName"], SQLSRV_PARAM_IN),
array($_POST["Email"], SQLSRV_PARAM_IN),
array($_POST["Username"], SQLSRV_PARAM_IN),
array(md5($_POST["Password"]), SQLSRV_PARAM_IN),
array(date("Y-m-d H:i:s"), SQLSRV_PARAM_IN),
array($_SERVER["REMOTE_ADDR"], SQLSRV_PARAM_IN),
array("Member", SQLSRV_PARAM_IN),
array("No", SQLSRV_PARAM_IN),
array($UserID, SQLSRV_PARAM_OUT)
);
$tsql_callSP = "{call InsertUser(?,?,?,?,?,?,?,?,?,?)}";
$stmt3 = sqlsrv_query($con, $tsql_callSP, $params);
if ($stmt3 === false) {
echo "Error in executing statement";
die(print_r(sqlsrv_errors(), true));
}
sqlsrv_next_result($stmt3);
echo "Hi " . $_POST["FirstName"] . ", your User ID is " . $UserID . ".";
}
} else {
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again.");
}
我完全按照教程。当我在数组之前声明$ UserID时,它只打印出变量中声明的值而不是输出参数。输入参数工作正常,因为我可以在数据库中看到它们。希望有人可以帮助解决这个问题。
谢谢
道格拉斯
答案 0 :(得分:2)
我不是百分百肯定,但我相信这要求你为输出分配一个类型 尝试更改此内容:
$params = array(
array($_POST["FirstName"], SQLSRV_PARAM_IN),
array($_POST["LastName"], SQLSRV_PARAM_IN),
array($_POST["Email"], SQLSRV_PARAM_IN),
array($_POST["Username"], SQLSRV_PARAM_IN),
array(md5($_POST["Password"]), SQLSRV_PARAM_IN),
array(date("Y-m-d H:i:s"), SQLSRV_PARAM_IN),
array($_SERVER["REMOTE_ADDR"], SQLSRV_PARAM_IN),
array("Member", SQLSRV_PARAM_IN),
array("No", SQLSRV_PARAM_IN),
array($UserID, SQLSRV_PARAM_OUT)
);
到
$params = array(
array($_POST["FirstName"], SQLSRV_PARAM_IN),
array($_POST["LastName"], SQLSRV_PARAM_IN),
array($_POST["Email"], SQLSRV_PARAM_IN),
array($_POST["Username"], SQLSRV_PARAM_IN),
array(md5($_POST["Password"]), SQLSRV_PARAM_IN),
array(date("Y-m-d H:i:s"), SQLSRV_PARAM_IN),
array($_SERVER["REMOTE_ADDR"], SQLSRV_PARAM_IN),
array("Member", SQLSRV_PARAM_IN),
array("No", SQLSRV_PARAM_IN),
array($UserID, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT)
);
参考:here