2017-01-18 20 views
7

ODBCとPHPを使用してoutパラメータの値を取得しようとしています。私はオンラインで検索してきましたが、無駄です。 PDOとmysqliには多くの解決策があり、odbcにはthisしか見つかりませんでした。私はパラメータによって失われていますし、操作も関係しています。ODBCとPHPを使用したスト​​アドプロシージャのデータの取得

私はデータベースに接続することができますが、エラーは常にポップアップします。私はそれらを理解することができませんでした。

[Sybaseの] [ODBCドライバ]無効な文字列またはバッファ長

任意の提案?

<?php 

$conn=odbc_connect("dsn", " ", " "); 

if (!$conn) 
{ 
exit("Connection Failed: " . $conn); 
} 

$sql=odbc_prepare("CALL ndTblUser (@varUserId,@varUserPwd)"); 
$stmt=odbc_execute($sql, "SELECT @varUserId as UserId, @varUserPwd as UserPwd"); 

$rs=odbc_exec($conn,$stmt); 

if (!$rs) 
{ 
exit("Error : " . odbc_errormsg()); 
} 
echo "<table><tr>"; 
echo "<th>Id</th>"; 
echo "<th>Password</th></tr>"; 

while (odbc_fetch_row($rs)) 
{ 
$UserId=odbc_result_all($rs,"UserId"); 
$UserPwd=odbc_result_all($rs,"UserPwd"); 
echo "<tr><td>$UserId</td>"; 
echo "<td>$UserPwd</td></tr>"; 
} 

odbc_close($conn); 
?> 

答えて

1

私は最終的に解決策を見つけました。

この質問のデータを取得する際には、ストアドプロシージャの誤解がたくさんあります。最も単純なものさえ。

呼び出されたパラメータのデータを取得する代わりに、呼び出されたパラメータが他の結果パラメータを呼び出すために使用されます。たとえば、ここではUserIdUserPwdが表示され、UserNameLoginStatusが表示されます。

これは、結果パラメータUserNameLoginStatusUserIdUserPwdの可変パラメータに基づいてデータを取得するための正しいコードです。

<?php 

$conn=odbc_connect("dsn", " ", " "); 

if (!$conn) 
{ 
    exit("Connection Failed : " . $conn); 
} 

$stmt=odbc_exec($conn,"CALL ndTblUser (".$_POST['UserId'].",'".$_POST['UserPwd']."')"); 

if (!$stmt) 
{ 
    "Error : " . odbc_errormsg(); 
} 

if (odbc_fetch_row($stmt)) 
{ 
    $UserName=odbc_result($stmt,"UserName"); 
    $LoginStatus=odbc_result($stmt,"LoginStatus"); 
} 


if($LoginStatus==1) 
{ 
    echo odbc_result($stmt,"UserName"); 
    echo odbc_result($stmt,"LoginStatus"); 
} 
1

は今、私は推測についてだけど、実際のクエリで$UserId$UserPwdが列ことになっている場合は、彼らから$ -signを削除してみてください。後でコードで$ -signを使用して列名として取得しようとしているので、エラーの原因になっているかどうかはわかりません。彼らは$UserId=odbc_result($rs,"UserId");までのPHP変数ではありません。

+0

ねえ、私は考えていました。たぶん私はあなたの答えを誤解しました。もっと説明できますか? @ user2620460 –

関連する問題