Mam problem z funkcją w klasie wspomagającej PDO, a dokładniej niby działa, ale wykonując takie zapytanie
$sql = $db->mexecute('INSERT INTO dupy (id,pid,sid) VALUES (:id,:pid,:sid)',
na 3 wysłane parametry zapisują się tylko 2 pierwsze, a w miejsce 3 zapisuje się 0 (zero). Każda kolumna w bazie jest intem, a funkcja "mexecute" wygląda tak
public function mexecute($query, $binds = null, $val = null) { try { if($binds !== null && $val !== null) { $sql = $this->dba->prepare($query); foreach($binds as $n => &$bind) foreach($val as &$val2) { $i=0; foreach($binds as &$bind) { $bind[0] = $val2[$i++]; } $sql->execute(); } return $sql; } else { foreach($binds as $n => &$bind) { echo $n.' '.$bind.'<br />'; // oczysiście każde użycie echo czy var_dump jest tylko dla sprawdzenia, czy wartości się przypisują poprawnie } foreach($val as &$val2) { $i=0; foreach($binds as &$bind) { $bind = $val2[$i++]; } $sql->execute(); $sql->debugDumpParams(); } return $sql; } } else { $sql->bindParam(1, $binds); foreach($val as $binds) $sql->execute(); return $sql; } } else { echo '[mexecute] Parametr #3 nie jest tablicą, użyj \'execute\' do wykonania pojedynczego zapytania!'; } } else { } } catch(PDOException $e) { } return null; }
a na stronie wyświetla mi się coś takiego
:id 1 :pid 1 :sid 1 1: 92|92 # 2: 666|666 # 3: 6|6 # 1: 93|93 # 2: 666|666 # 3: 4|4 #
czyli tutaj jest chyba wszystko ok. Dodam jeszcze tylko tyle, że gdy wykorzystam tę funkcję
public function execute($query, $binds = null, $type = 0) { try { if($binds !== null) { $sql = $this->dba->prepare($query); foreach($binds as $n => $bind) } else { if($type) { $sql->execute($binds); return $sql; } else { foreach($binds as $n => $bind) } } } else { $sql->bindValue(1, $binds); } $sql->execute(); return $sql; } else { } } catch(PDOException $e) { } return null; }
z takim wywołaniem
$sql = $db->execute('INSERT INTO dupy (id,pid,sid) VALUES (:id,:pid,:sid)',
to oczywiście w bazie zapisują się wszystkie 3 wartości w 3 kolumnach. Ktoś może wie czemu te podwójne zapisanie wartości nie działa tak jak trzeba? Coś robię źle?