使用未定义常量 SQLSRV_SQLTYPE_VARCHAR - 假设 'SQLSRV_SQLTYPE_VARCHAR
Use of undefined constant SQLSRV_SQLTYPE_VARCHAR - assumed 'SQLSRV_SQLTYPE_VARCHAR
我无法使用 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;
}
我明白了:
Notice: Use of undefined constant SQLSRV_PHPTYPE_STRING - assumed
'SQLSRV_PHPTYPE_STRING
还有这个:
An invalid PHP type for parameter 3 was specified.
我回答了以下问题和参考资料(以及更多),其中 none 帮助了我:
- PHP Get return value from MSSQL Stored Procedure
- https://msdn.microsoft.com/en-us/library/cc296183(v=sql.105).aspx
注意:当我使用 WebMatrix 尝试此操作时,我只看到第二条消息。
来自php.net:
SQLSRV_PHPTYPE_STRING (integer)
Specifies a string PHP data type. This constant works like a function and accepts an encoding constant.
常量 SQLSRV_PHPTYPE_STRING
将被视为一个函数,因为您必须传递一个编码常量才能使其工作。例如:
array(&$resultado, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR)
可以找到编码常量和有关 PHPTYPE 常量的更多信息 here。
从上面 link:
When you use SQLSRV_PHPTYPE_STREAM or SQLSRV_PHPTYPE_STRING, the encoding must be specified. If no parameter is supplied, an error will be returned.
编辑
由于问题标题实际上询问的是 SQLSRV_SQLTYPE_VARCHAR
而不是 SQLSRV_PHPTYPE_STRING
我应该指出前者也是如此:
SQLSRV_SQLTYPE_VARCHAR (integer)
Describes the varchar SQL Server data type. This constant works like a function and accepts a single parameter indicating the character count.
因此,您将添加一个参数来表示该字段的最大字符数,就像您在 SQL 中所做的那样。所以像:
SQLSRV_SQLTYPE_VARCHAR(512)
其中 512
是 1-8000 之间的整数。
因为当您在 SQL 中使用 varchar(MAX)
时,您将使用:
SQLSRV_SQLTYPE_VARCHAR("max")
我无法使用 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;
}
我明白了:
Notice: Use of undefined constant SQLSRV_PHPTYPE_STRING - assumed 'SQLSRV_PHPTYPE_STRING
还有这个:
An invalid PHP type for parameter 3 was specified.
我回答了以下问题和参考资料(以及更多),其中 none 帮助了我:
- PHP Get return value from MSSQL Stored Procedure
- https://msdn.microsoft.com/en-us/library/cc296183(v=sql.105).aspx
注意:当我使用 WebMatrix 尝试此操作时,我只看到第二条消息。
来自php.net:
SQLSRV_PHPTYPE_STRING (integer)
Specifies a string PHP data type. This constant works like a function and accepts an encoding constant.
常量 SQLSRV_PHPTYPE_STRING
将被视为一个函数,因为您必须传递一个编码常量才能使其工作。例如:
array(&$resultado, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR)
可以找到编码常量和有关 PHPTYPE 常量的更多信息 here。
从上面 link:
When you use SQLSRV_PHPTYPE_STREAM or SQLSRV_PHPTYPE_STRING, the encoding must be specified. If no parameter is supplied, an error will be returned.
编辑
由于问题标题实际上询问的是 SQLSRV_SQLTYPE_VARCHAR
而不是 SQLSRV_PHPTYPE_STRING
我应该指出前者也是如此:
SQLSRV_SQLTYPE_VARCHAR (integer)
Describes the varchar SQL Server data type. This constant works like a function and accepts a single parameter indicating the character count.
因此,您将添加一个参数来表示该字段的最大字符数,就像您在 SQL 中所做的那样。所以像:
SQLSRV_SQLTYPE_VARCHAR(512)
其中 512
是 1-8000 之间的整数。
因为当您在 SQL 中使用 varchar(MAX)
时,您将使用:
SQLSRV_SQLTYPE_VARCHAR("max")