Вызовите хранимую процедуру, используя ODB C из PHP, работающей в Linux - odbc_prepare не работает - PullRequest
0 голосов
/ 22 января 2020

Мне нужно вызвать хранимую процедуру на SQL сервере. Я использую ODB C через PHP на Linux.

Я могу подключиться, но не могу вызвать процедуру, что-то не так с моим синтаксисом.

Если разработчик базы данных, которую я вызывал, чтобы запустить ее сам (на Windows), он записал бы это как exe c DW_Insert_MemberFromWeb 158 (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 ODB C для моего соединения, поэтому я думаю, что мне нужно напиши как это вместо этого ?? Эти строки не завершаются до выполнения строки.

$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. ";
    }

1 Ответ

0 голосов
/ 24 января 2020

Я наконец нашел код, который будет работать, он предназначен для PDO_ODB C, используя PHP 7. Я никогда не мог связать параметр, поэтому я просто собрал весь код 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
    }
}
...