Есть методы в классах. Код (Text): class PDO_MSQL { private static $instance; // ссылка на экземпляр класса // // Получение единственного экземпляра (одиночка) // public static function Instance() { if (self::$instance == null) self::$instance = new PDO_MSQL(); return self::$instance; } // // Конструктор // public function __construct() { global $dbh; $this->dbh = $dbh; } ...... // // Вставка строки // public function Insert($table, $object) { $columns = array(); $values = array(); foreach ($object as $key => $value) { $columns[] = $key; if ($value === null) { $values[] = 'NULL'; } else { $values[] = "'$value'"; } } $columns_s = implode(',', $columns); $values_s = implode(',', $values); // Подготавливаем строку для Insert $this->dbh->prepare("UPDATE $table SET $columns_s")->execute(array($values_s)); } ..... } и Метод класса M_Structure Код (Text): class M_Structure extends M_Base { private static $instance; // ссылка на экземпляр класса private $msql; // драйвер БД private $dbh; // // Получение единственного экземпляра (одиночка) // public static function Instance(){ if (self::$instance == null) self::$instance = new M_Structure(); return self::$instance; } // // Конструктор // public function __construct(){ global $dbh; $this->msql = PDO_MSQL::Instance(); $this->dbh = $dbh; } ....... // // Добавление новой страницы public function AddStructure($title,$description,$keywords,$date,$text,$translit){ // Прибавляем еденицу к сорту $Sort_Last = $Sort_Last['s_sort']+1; // Объект вставки $object = array(); $object['s_title=?'] = $title; $object['s_description=?'] = $description; $object['s_keywords=?'] = $keywords; $object['s_date=?'] = $date; $object['s_text=?'] = $text; $object['s_translit=?'] = $translit; $object['s_sort=?'] = $Sort_Last; $this->msql->Insert('Structure', $object); } ..... } При выполнениии всегда пишет ошибку Код (Text): Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in (Путь до фаила / PDO_MSQL.php) Аргументы передаются в равном соотноошении. В чём может быть ошибка?
Как параметров нет. Они передаются в ассоциативный массив после foreach'ем я делю их на строки таблицы и значения которые надо вставить.
Код (Text): var_dump($columns_s); var_dump($columns_s); перед Код (Text): // Подготавливаем строку для Insert $this->dbh->prepare("UPDATE $table SET $columns_s")->execute(array($values_s)); Сделайте пожалуйста, и покажите результат
Всё решено. НАписал метод в итоге: Код (Text): public function Insert($table, array $object) { $columns_s = implode(',', array_keys($object)); // // Подготавливаем строку для INSERT $ResultInsert = $this->dbh->prepare("INSERT INTO $table SET $columns_s")->execute(array_values($object)); // // Возвращаем значение return ($ResultInsert == true) ? (true) : false; } Может кому пригодится. А в $object это ассоциативный массив с ключём строки таблицы и со значением которое надо вставить.
Конечно же надо было Код (Text): var_dump($columns_s); var_dump($values_s); Но сути это не меняет. У тебя скорее всего было разное количество элементов в массиве