使用ODBC和PHP检索存储过程的数据

时间:2017-01-18 07:01:01

标签: php sql odbc sqlanywhere

我尝试使用ODBC和PHP检索out参数的值。我一直在网上搜索但无济于事。 PDO和mysqli有很多解决方案,我只为odbc找到了this。我有点因参数丢失而且操作涉及到。

我能够建立与数据库的连接,但总是会弹出错误。我无法弄明白。

  

[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);
?>

2 个答案:

答案 0 :(得分:1)

现在我只是在猜测,但如果实际查询中的$UserId$UserPwd应该是列,请尝试从中删除$ -sign。稍后在代码中,您尝试将其作为列名而不使用$ -sign,因此我不确定是否会导致错误。在$UserId=odbc_result($rs,"UserId");之前,它们不是PHP变量。

答案 1 :(得分:1)

我终于找到了解决方案。

在检索此问题的数据时,我对存储过程有很多误解。即使是最简单的一个。

调用参数用于调用其他结果参数,而不是检索被调用参数的数据。例如,调用UserIdUserPwd来显示UserNameLoginStatus

这是用于检索结果参数UserNameLoginStatus的数据并基于UserIdUserPwd的变量参数的正确代码。

<?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");
}