-3
Я процедура, которая занимает несколько Params в качестве входных данных и дает выход одной переменнойКак передать несколько параметров хранимой процедуры, используя PDO в PHP
здесь я вставляемого мой код ниже.
Обновлено
$sqlStr = 'call sp_testproc(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);';
$c = new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password");
$stmt = $c->prepare($sqlStr);
$bindValues = array(
'fields' => array(
array('type' => 'input', 'name' => ':From', 'value' => '[email protected]', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':To', 'value' => '[email protected]', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':Cc', 'value' => '', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':Bcc', 'value' => '', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':Subject', 'value' => 'some value given', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':someId', 'value' => 10334, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':someId1', 'value' => 307560, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':ReadOrUnread', 'value' => 1, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':HasAttachments', 'value' => 1, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':someId2', 'value' => 9, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':someId3', 'value' => 89, 'data_type' => PDO::PARAM_INT),
array('type' => 'input', 'name' => ':link', 'value' => 'http:google.com', 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':someId4', 'value' => 3998, 'data_type' => PDO::PARAM_STR),
array('type' => 'input', 'name' => ':MailDate', 'value' => '2014-02-01', 'data_type' => PDO::PARAM_STR),
array('type' => 'output', 'value' => '$Id', 'data_type' => PDO::PARAM_INPUT_OUTPUT),
)
);
$proc_pass_val = null;
if (isset($bindValues['fields']) && is_array($bindValues['fields'])) {
$arg_cnt = 1;
for ($i = 0; $i < count($bindValues['fields']); $i++) {
$bindValue = $bindValues['fields'][$i]["value"];
$param_type = $bindValues['fields'][$i]["type"];
$data_type = $bindValues['fields'][$i]["data_type"];
if ($param_type == 'input') {
$stmt->bindValue($arg_cnt++, $bindValue, $data_type);
} elseif ($param_type == 'output') {
$stmt->bindParam($arg_cnt++, $proc_pass_val, $data_type);
}
}
}
$stmt->execute();
print "procedure returned $proc_pass_val\n";
Примечание: Я использую MSSQL сервер
Я хочу, чтобы выходной Procedure в переменной $ Id, пожалуйста, предложите мне, где я пошло не так
Спасибо in Advance
'... используя знак вопроса заполнители, это будет 1-индексированную позицию параметр ... '[doc] (http://php.net/manual/en/pdostatement.bindvalue.php)' $ arg_cnt' не инициализирован, поэтому ставьте '$ arg_cnt = 1' перед циклом или используйте' ++ $ arg_cnt' – cske
bindParam second arg shoud be '$$ bindValue' я думаю – cske
Я хочу, чтобы переменная была в' $ Id', поэтому я проходил так, если бы я проходил strin g literal Я думаю, что это вызовет ошибку, которая не может пройти param 2 по ссылке –