PDO связывает n раз одинаковое значение с foreach
У меня есть функция в PHP, которая должна связать в операторе MySQL IN столько переменных, что находится в массиве. Моя проблема в том, что переменная и ключ меняются, но функция связывает только последнее значение n раз.
Я понятия не имею, в чем проблема ...
Вот мой метод класса:
public function getOtListByOtNumbers($conditions){
$data_array = $conditions[SEARCH_OT];
# To find last key (remove coma)
$quantity = count($data_array);
$marks = '';
# Bind name string && rewriting value as integer
foreach ($data_array as $key => $value){
$i = $key+1;
if ($i == $quantity){
$marks .= ':key'.$i;
}
else {
$marks .= ':key'.$i.', ';
}
}
# Query
$sql="
SELECT
c_int_id,
c_ot,
c_tickets_amount,
c_basket_value,
c_person,
c_company,
c_city,
c_package_number,
c_delivery_method,
c_ot_date,
c_email,
c_phone,
c_comment,
c_send
FROM ws_orders
WHERE c_ot IN (".$marks.")
ORDER BY c_int_id DESC
LIMIT :first, :last ";
$stmt = $this->PDO->prepare($sql);
# Bind n values
// Here is a problem
var_dump($data_array); // var dump 1
foreach ($data_array as $key => $param){
$key_number = $key +1;
$key_name = 'key'.$key_number;
$stmt->bindParam($key_name, $param, PDO::PARAM_INT);
var_dump($key_name); // var dump 2
var_dump($param); // var dump 3
}
# Bind limit values
$stmt->bindParam('first', $conditions[OT_SEARCH_FIRST_ROW], PDO::PARAM_INT);
$stmt->bindParam('last', $conditions[OT_SEARCH_ROW_LIMIT], PDO::PARAM_INT);
# If executed return result
if ($stmt->execute() != FALSE) {
$stmt_result = $stmt->fetchAll();
$stmt->closeCursor();
var_dump($stmt_result); // var dump 4
# If not executed print debug and return FALSE
} else {
var_dump($stmt->errorInfo());
$this->debugQuery($stmt);
$stmt_result = FALSE;
}
return $stmt_result;
}
Вот вар дупс:
вар дамп 1
array (size=2)
0 => string '2761531'
1 => string '2760650'
вар дамп 2 и 3
string 'key1' (length=4)
string '2761531'
string 'key2' (length=4)
string '2760650'
SQL-запрос из этого выполнения
SELECT
c_int_id,
c_ot,
c_tickets_amount,
c_basket_value,
c_person,
c_company,
c_city,
c_package_number,
c_delivery_method,
c_ot_date,
c_email,
c_phone,
c_comment,
c_send
FROM ws_orders
WHERE c_ot IN ('2760650', '2760650')
ORDER BY c_int_id DESC
LIMIT 0, 30
Так что я делаю не так?
РЕДАКТИРОВАТЬ
Так я и сделал;) Проблема была с foreach
Вместо:
foreach ($data_array as $key => $param){
$key_number = $key +1;
$key_name = 'key'.$key_number;
$stmt->bindParam($key_name, $param, PDO::PARAM_INT);
var_dump($key_name); // var dump 2
var_dump($param); // var dump 3
}
Я даю:
for ($key_number = 0; $key_number < $quantity + 1; $key_number++) {
$key_name = 'key'.$key_number;
$stmt->bindParam($key_name, $data_array[$key_number], PDO::PARAM_INT);
}
И это работает, но я до сих пор не знаю, в чем проблема с более ранним foreach ...