ich eine gespeicherte Prozedur, die einige Integer-Parameter verwendet:PDO :: bindParam/bindValue schafft den falschen Parameter Typ
CREATE PROCEDURE [dbo].[redacted_name]
@CustomerID int ,
@ContactPersonID int,
@ChangeContactPersonId int = null,
@Name varchar(50) = NULL
-- snip
AS
BEGIN
-- snip
END
ich den folgenden Code bin mit dieser gespeicherten Prozedur aufzurufen:
$db = $this->db();
$statement = $db->prepare("exec dbo.redacted_name @CustomerId=?,@ContactPersonId=?");
$statement->bindValue(1, 73, PDO::PARAM_INT);
$statement->bindValue(2, 42, PDO::PARAM_INT);
$statement->execute();
//snip
Welche der folgenden SQL erzeugt aus einem Profiler packte:
declare @p1 int
exec sp_prepexec @p1 output,N'@P1 TEXT,@P2 TEXT',N'exec dbo.redacted_name @[email protected],@[email protected]','73','42'
select @p1
exec sp_unprepare @p1
go
Ausführung dieser SQL verursacht th e folgende Fehler auf Microsoft SQL Server-11.0.5343:
Msg 206, Ebene 16, Status 2 Prozedur redacted_name, Zeile 0
int unvereinbar ist
Operand-Typenkonflikt: Text mit
Welche macht Irgendein Sinn, weil TEXT != INT
In Anbetracht dessen, dass ich PDO speziell gesagt habe, dass ich eine INT
überlasse, warum erzeugt PDO zwei TEXT
Variablen? Und was kann ich tun, um es zu umgehen?
haben Sie versucht mit bindParam()? – Robert
@Robert Ja. Gleiches Problem. Ich habe die Frage mit 'bindValue' gepostet, weil dadurch der Code etwas kürzer wird (keine Variablen erforderlich). –
Es gibt "Treiberoptionen" Argument für BindParam() vielleicht würde es helfen – Robert