Вы не можете использовать эту часть:
and ProductId in (?)
Помните: параметры SQL не похожи на C
макросы, где вы просто выполняете замену строк.Они больше, чем thar: Когда вы используете ?
, один и только один параметр привязывается.Таким образом, когда вы пытаетесь связать 1,2,3
с этим параметром, вы не пытаетесь связать три значения, а только одно.
Если ваш список будет фиксированного размера, вы можете использовать:
and ProductId in (?,?,?)
В противном случае, я не думаю, что вы сможете использовать параметры для этого предложения.Возможно, делаете что-то вроде:
set @initDt1=PInitialDateFrom,
@initDt2 = PInitialDateTo,
@inlist=PIDs,
@stmt_text = null;
set @stmt_text =
concat('Select AccountID, Firstname as ClientName, EmailID, ProductID
, InitialPurchaseDate as Purchasedate from client_account
where IsRemoved=0 and (InitialPurchasedate between ? and ?)
and ProductId in (', @inlist, ')');
prepare stmt from @stmt_text;
execute stmt using @initDt1, @initDt2;
deallocate prepare stmt;
Убедитесь, что вы дезинфицируете свой ввод для PIDs
, чтобы не добавлять уязвимости SQLInjection в свой код.