Comment faire pour exécuter une procédure stockée en php à l'aide de sqlsrv et “?” paramètres de style

J'ai regardé sur plusieurs autres questions qui semblent (de titres) la même chose que ce. Cependant, mon cas est un peu différent.

Les ouvrages suivants (c'est à dire j'obtiens un "succès" et ma base de données effectue ce que j'attends lors de l'exécution de la procédure avec les variables):

$sql = "MyDB.dbo.myProcedure {$var1}, {$var2}, {$var3}";
$result = sqlsrv_query($myConn, $sql);
if (!$result) {
    echo 'Your code is fail.';
}
else {
    echo 'Success!';
}

Je veux éviter (ou de diminuer la possibilité d') d'injection SQL par la création de la chaîne SQL à l'aide de paramètres. Par exemple:

$sql = "select * from aTable where col1 = ? AND col2 = ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2));
//please note. This code WILL work!

Mais quand je le fais avec une procédure stockée, il échoue. Il ne parvient pas à pas les erreurs signalées par sqlsrv_errors(), aucune des mesures prises dans la base de données, et $result === false.

Pour être clair, la suivante échoue:

$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2, $var3));

De même un prepare/execute créés de la même façon, échouera aussi:

$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$stmt = sqlsrv_prepare($myConn, $sql, array(&$var1, &$var2, &$var3));
foreach($someArray as $key => $var3) {
    if(sqlsrv_execute($stmt) === false) {
        echo 'mucho fail.';
    }
}
//this code also fails.

Pour être complet, j'ai confirmé que la procédure stockée en question fonctionne directement dans SQL Management Studio ET si elle est appelée la façon dont je l'ai mentionné ci-dessus. De même, j'ai confirmé que je peut utiliser des requêtes paramétrées pour la crue de la requête (par exemple, un insert, select, update vs une procédure stockée).

Donc, ma question est comment puis-je appeler une procédure stockée à l'aide de la requête paramétrée vs, l'incorporation de ces variables dans la chaîne de requête?

Plus important, je suis réellement désireux d'utiliser une préparation et d'exécution, donc j'espère que la réponse sera de permettre que cela fonctionne ainsi.

Avez-vous essayé comme l'exemple à la page de manuel? $sql = "EXEC stp_Create_Item @Item_ID = ?, @Item_Name = ?"; php.net/manual/en/function.sqlsrv-prepare.php ... ou pas, les exemples, mais à partir de la User Contributed Notes
J'ai lu par l'utilisateur contribué notes sur le sqlsrv_query page, mais évidemment, je n'ai pas le lire ou de l'avis de cet exemple sur la page liée. Ce qui, apparemment, est la façon de le faire. Voulez-vous ajouter ce que une réponse, donc je peux le marquer pour toute les futures recherches? Sinon, je vais le faire.

OriginalL'auteur LittleTreeX | 2015-07-22