Je suis en cours d'exécution dans un problème avec la bibliothèque PHP ADOdb (https://sourceforge.net/projects/adodb/) et MSSQL Server 2012Question numéro de marque avec ADOdb et MSSQL
Je fais une simple déclaration de mise à jour avec un espace réservé, comme celui-ci, mais il ne parvient dire que je ne donne pas assez de paramètres à la fonction Exécuter:
UPDATE report SET custom='Is this ok?' WHERE ID = ?
J'ai vérifié les adodb-mssql.inc.php et dans la fonction Préparer simple remplacer tous? avec la syntaxe de @P pour MSSQL, au lieu de vérifier ce qui est un paramètre fictif et ce n'est pas:
function Prepare($sql)
{
$sqlarr = explode('?',$sql);
if (sizeof($sqlarr) <= 1) return $sql;
$sql2 = $sqlarr[0];
for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) {
$sql2 .= '@P'.($i-1) . $sqlarr[$i];
}
return array($sql,$this->qstr($sql2),$max,$sql2);
}
Donc, dans ma requête je reçois 2 @P params (@ P0 à l'intérieur des guillemets (non prévu comme un espace réservé) , @ P1 en tant que vrai espace réservé), entraînant déjà cette erreur car je ne donne que la fonction Execute 1 à remplacer au lieu de deux.
Est-ce une limite connue de la bibliothèque ADOdb? Dois-je vérifier chaque champ et remplacer le point d'interrogation non utilisé comme espace réservé par quelque chose de différent avant d'exécuter la requête ou est-ce que je manque quelque chose?
Ceci est une limitation connue des outils sans fin qui simulent des déclarations préparées à l'aide de remplacement de chaîne stupide. Mais cela semble trop mauvais pour être vrai. Etes-vous sûr d'avoir récupéré la dernière version disponible? –
5.18, mise à niveau vers 5.20 juste maintenant pour tester si cela a été corrigé, mais la fonction de préparation est la même dans les deux versions. EDIT: Mise à niveau vers 5.20, même numéro: Avertissement: mssql_query(): message: Doit déclarer la variable scalaire "@ P1". – Cusy