Ich bin mit ADOdb PHP-Bibliothek (https://sourceforge.net/projects/adodb/) und MSSQL Server 2012Fragezeichen Problem mit ADOdb und MSSQL
in ein Problem laufenIch bin mit einem Platzhalter eine einfache Update-Anweisung zu tun, genau wie diese, aber es ist immer sagen, dass ich nicht genug Parameter an die Funktion Execute gegeben hat:
UPDATE report SET custom='Is this ok?' WHERE ID = ?
ich die adodb-mssql.inc.php geprüft und in der Funktion Bereiten sie es jeder einfach ersetzen? mit der @P Syntax für MSSQL, anstelle der Prüfung, was ein Platzhalter ist und was nicht:
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);
}
Also in meiner Anfrage bekomme ich 2 @P params (@ P0 innerhalb der Anführungszeichen (nicht als Platzhalter gedacht) , @ P1 als der reale Platzhalter), was zu dem bereits erwähnten Fehler führt, da ich nur die Execute-Funktion 1 Parameter anstelle von zwei ersetzen lasse.
Ist dies ein bekanntes Limit der ADOdb-Bibliothek? Muss ich jedes Feld überprüfen und das Fragezeichen, das nicht als Platzhalter verwendet wird, durch etwas anderes ersetzen, bevor ich die Abfrage ausführe oder fehlt mir etwas?
Dies ist eine bekannte Einschränkung von endlosen Werkzeugen im Treiber gelöst werden, die vorbereiteten Anweisungen stumm string Ersatz emulieren. Aber das sieht zu schlecht aus um wahr zu sein. Sind Sie sicher, dass Sie die neueste verfügbare Version verwendet haben? –
5.18, jetzt auf 5.20 upgraden, nur um zu testen, ob das irgendwie behoben wurde, aber die Prepare-Funktion sieht in beiden Versionen gleich aus. EDIT: Upgrade auf 5.20, dasselbe Problem: Warnung: mssql_query(): Nachricht: Muss die Skalarvariable "@ P1" deklarieren. – Cusy