2016-08-02 16 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私は2番目のメッセージしか見ることができません。 php.netから

+0

'SQLSRV_PHPTYPE_STRING'は、そのコードにどこにもありません。 – AbraCadaver

+0

私もそれを試みました。 –

答えて

0

SQLSRV_PHPTYPE_STRING(整数)
は、文字列PHPデータ型を指定します。この定数は関数のように機能し、エンコーディング定数を受け入れます。

定数SQLSRV_PHPTYPE_STRINGは、それが機能するにはエンコード定数を渡す必要があるため、関数として扱われます。たとえば:PHPTYPE定数の

array(&$resultado, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR) 

エンコーディング定数と詳細hereを見つけることができます。上記のリンクから


あなたがSQLSRV_PHPTYPE_STREAMやSQLSRV_PHPTYPE_STRINGを使用して、エンコーディングを指定する必要があります。パラメータを指定しないと、エラーが返されます。


編集
質問のタイトルは実際におよそSQLSRV_SQLTYPE_VARCHARなくSQLSRV_PHPTYPE_STRINGを尋ねると私は同じ前者のために真であることを指摘すべきである:

SQLSRV_SQLTYPE_VARCHAR(整数)
varchar SQL Serverのデータ型について説明します。この定数は関数のように機能し、文字カウントを示す単一のパラメータを受け取ります。

このように、SQLの場合と同様に、このフィールドの最大文字数を表すパラメータを追加します。だから、のようなもの:512は1から8000の間の整数である

SQLSRV_SQLTYPE_VARCHAR(512) 

。あなたが使用するSQLでvarchar(MAX)を使用するときのため

SQLSRV_SQLTYPE_VARCHAR("max") 
+0

ソリューションと余分なリファレンスをありがとうございました –

関連する問題