2016-08-02 49 views
0

我無法使用SQL Server 2014,PHP 7和Apache 2.4.17執行帶有輸出參數的sp。使用未定義的常量SQLSRV_SQLTYPE_VARCHAR - 假定爲'SQLSRV_SQLTYPE_VARCHAR

這是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

'SQLSRV_PHPTYPE_STRING'是無處在該代碼。 – AbraCadaver

+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之間的整數。

因爲當你使用varchar(MAX)在SQL你可以使用:

SQLSRV_SQLTYPE_VARCHAR("max") 
+0

非常感謝您的解決方案和額外的參考 –

相關問題