我无法使用SQL Server 2014,PHP 7和Apache 2.4.17执行带有输出参数的sp。
这是PHP:
$nombreUsuario = "DrBrahim";
$contraseña = "123456";
$resultado = "dummie";
$datosBienvenida = "dummie";
$sql = "{CALL LOGINv2 (?, ?, ?, ?)}";
$params = array(
array($nombreUsuario, SQLSRV_PARAM_IN),
array($contraseña, SQLSRV_PARAM_IN),
array(&$resultado, SQLSRV_PARAM_OUT, null, SQLSRV_SQLTYPE_VARCHAR),
array(&$datosBienvenida, SQLSRV_PARAM_OUT, null, SQLSRV_SQLTYPE_VARCHAR),
);
$stmt = sqlsrv_query($conn, $sql, $params);
if($stmt === false){
echo 'No se pudo ejecutar la consulta:<br>';
var_dump(sqlsrv_errors());
die(print_r(sqlsrv_errors(), true));
}
else{
sqlsrv_next_result($stmt);
echo $resultado . "<br>Resultado: " . $resultado .
"<br>Datos de bienvenida: " . $datosBienvenida;
}
我明白了:
注意:使用未定义的常量SQLSRV_PHPTYPE_STRING - 假设 “SQLSRV_PHPTYPE_STRING
而且:
指定了参数3的无效PHP类型。
我已经阅读了以下问题和参考资料(以及更多),但没有一个能够提供帮助:
注意:当我使用WebMatrix尝试此操作时,我只会看到第二条消息。
答案 0 :(得分:0)
来自php.net:
SQLSRV_PHPTYPE_STRING(整数)
指定字符串PHP数据类型。此常量的作用类似于函数,并接受编码常量。
常量SQLSRV_PHPTYPE_STRING
将被视为一个函数,因为您必须传递一个编码常量才能使其工作。例如:
array(&$resultado, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR)
可以找到有关PHPTYPE常量的编码常量和更多信息here。
从上面链接:
使用SQLSRV_PHPTYPE_STREAM或SQLSRV_PHPTYPE_STRING时,必须指定编码。如果未提供参数,则将返回错误。
修改强>
由于问题标题实际上询问的是SQLSRV_SQLTYPE_VARCHAR
而不是SQLSRV_PHPTYPE_STRING
,我应该指出前者也是如此:
SQLSRV_SQLTYPE_VARCHAR(整数)
描述varchar SQL Server数据类型。此常量与函数类似,并接受指示字符数的单个参数。
因此,您可以添加一个表示该字段的最大字符数的参数,就像在SQL中一样。如下所示:
SQLSRV_SQLTYPE_VARCHAR(512)
其中512
是1-8000之间的整数。
当您在SQL中使用varchar(MAX)
时,您将使用:
SQLSRV_SQLTYPE_VARCHAR("max")