从在 Linux 上运行的 PHP 调用使用 ODBC 的存储过程 - odbc_prepare不起作用



我需要在SQL Server中调用一个存储过程。 我在Linux上通过PHP使用ODBC。

我可以连接,但不能调用该过程,我的语法不太正确。

如果我调用的数据库的开发人员自己运行它(在Windows上(,他会把它写成exec DW_Insert_MemberFromWeb158(158是我需要传递的参数(


$conn = new PDO("odbc:MSSQLServer", $username, $password);  // this works fine
$stmt    = odbc_prepare($conn, "call DW_Insert_MemberFromWeb(?)");     // THIS DOES NOT
if(!$stmt) {echo "could not prepare statement.";}
$success = odbc_execute($stmt, 158);
odbc_close($conn); 

我已经尝试了这些不同的方法(当然一次一种(:


$stmt    = odbc_prepare($conn, 'call DW_Insert_MemberFromWeb(?)');
$stmt    = odbc_prepare($conn, "call DW_Insert_MemberFromWeb(?)");
$stmt    = odbc_prepare($conn, "call dbo.DW_Insert_MemberFromWeb(?)");    
$stmt    = odbc_prepare($conn, "call exec DW_Insert_MemberFromWeb(?)");

谢谢你的建议。我现在已经尝试了所有这些,但无济于事:


$stmt = odbc_prepare($conn, "exec DW_Insert_MemberFromWeb ?");
$stmt = odbc_prepare($conn, "call DW_Insert_MemberFromWeb ?");
$stmt = odbc_prepare($conn, "call exec DW_Insert_MemberFromWeb ?");
$stmt = odbc_prepare($conn, "{call DW_Insert_MemberFromWeb ?}");
$stmt = odbc_prepare($conn, "{exec DW_Insert_MemberFromWeb ?}"); 
$stmt = odbc_prepare($conn, "{exec DW_Insert_MemberFromWeb (?)}"); 
$stmt = odbc_prepare($conn, "{exec DW_Insert_MemberFromWeb 158}");
$stmt = odbc_prepare($conn, "SELECT * FROM MyTableName"); 

我正在使用PDO ODBC进行连接,所以我认为我需要这样写它??在执行行之前,这些行不会失败。

$conn = new PDO("odbc:MSSQLServer", $username, $password);
//$stmt = $conn->prepare("exec DW_Insert_MemberFromWeb ?");
$stmt = $conn->prepare("exec DW_Insert_MemberFromWeb (?)");
//$stmt->bind_param("158");  
$stmt->bind_param(158);  
$stmt->execute();
$conn = new PDO("odbc:MSSQLServer", $username, $password);
if ($conn) { 
echo "connected. ";
} else {
echo "not connected. ";
}

我终于找到了可以使用 PHP 7 的PDO_ODBC代码。 我永远无法绑定参数,所以我只是将整个 SQL 代码构建为变量。

$conn = new PDO("odbc:MSSQLServer", $username, $password);
$TheMSSQL = "exec DW_Insert_MemberFromWeb " . $myvar;
$stmt = $conn->prepare($TheMSSQL);
$stmt->execute();
if ($stmt) { 
$result = $stmt->fetchAll();
foreach($result as $rst)
{
$MemberNum = $rst[MyFieldName];
//do some other stuff
}
}

最新更新