Здравствуйте! ДБ MySQL, столкнулся с проблемой, не вставляются строки в БД. Раньше все было нормально пока с датой не стал работать. вот к примеру функция, которая записывает id сессии в БД. Код (Text): private function openSession($id_user) { // генерируем SID $sid = $this->generateStr(20); // вставляем SID в БД $now = date('Y-m-d H:i:s'); $time_start = $now; $time_last = $now; $query = "INSERT INTO `sessions` (`id_user`, `sid`, `time_start`, `time_last`) VALUES (:id_user, :sid, :time_start, :time_last)"; $this->dbDriver->insert($query, array(':id_user' => $id_user, ':sid' => $sid, ':time_start' => $time_start, ':time_last' => $time_last)); // регистрируем сессию в PHP сессии $_SESSION['sid'] = $sid; // возвращаем SID return $sid; } В SQL-запросе есть поле дата-тайм. В БД поля time_last и time_start имеют тип datatime. Не вставляются у меня записи в БД именно если запрос содержит дату и время. Есть у меня драйвер БД, который умеет вставлять, удалять, выбирать и обновлять записи в БД. Использует PDO. Старался сделать его универсальным, чтобы использовать в будущем. Там как раз функция insert реализована. Код (Text): class MySQL { private static $instance; public static function instanceMySQL() { if (self::$instance == NULL) self::$instance = new MySQL(); return self::$instance; } /** * Функция возвращает экземпляр класса PDO для подключения к базе данных. * @return PDO * @throws PDOException */ private function dbConnect() { // подключаем конфигурацию базы данных require_once('m/db_config.php'); // подключаемся к БД try { $dbh = new PDO("mysql:dbname={$dbname}; host={$hostname}", $username, $password); if (empty($dbh)) throw new PDOException; return $dbh; } catch (PDOException $e) { die('Ошибка соединения с БД: ' . $e->getMessage()); } } /** * Производит связывание параметров для последующей подготовки запроса. * @param PDOStatement $stmt - экземпляр PDO. * @param array $args - массив с параметрами. * @return PDOStatement - ссылка на объект с подготовленными параметрами. */ private function dataBinding(PDOStatement $stmt, array $args) { foreach ($args as $key => &$value) { $data_type = is_numeric($value) ? PDO::PARAM_INT : PDO::PARAM_STR; $stmt->bindParam($key, $value, $data_type); } return $stmt; } /** * Функция делает выборку соответствующего запроса из базы данных. * @param $query - строка запроса. * @param array $args - массив с параметрами SQL-запроса, для сопоставления. Если массив пустой, идет выборка списка статей, * если есть параметры, то происходит выборка конкретной статьи. * @return array|mixed - возвращает выборку из базы данных. */ public function select($query, $args = array()) { $pdo = $this->dbConnect(); if (empty($args)) { $stmt = $pdo->prepare($query); $stmt->execute(); return $stmt->fetchAll(); } else { $stmt = $pdo->prepare($query); $this->dataBinding($stmt, $args); $stmt->execute(); return $stmt->fetch(); } } /** * Функция осуществляет вставку статьи в БД. * @param $query - строка запроса. * @param $args - массив с параметрами SQL-запроса, для сопоставления. * @return int - возвращает идентификатор статьи созданной в БД. */ public function insert($query, $args) { $pdo = $this->dbConnect(); $stmt = $pdo->prepare($query); $this->dataBinding($stmt, $args); $stmt->execute(); return $pdo->lastInsertId(); } /** * Функция обновляет статью в БД. * @param $query - строка запроса. * @param $args - массив с параметрами SQL-запроса, для сопоставления. * @return int - возвращает идентификатор обновленной статьи в БД. */ public function update($query, $args) { $pdo = $this->dbConnect(); $stmt = $pdo->prepare($query); $this->dataBinding($stmt, $args); $stmt->execute(); return $stmt->rowCount(); } /** * Функция удаляет статью из БД. * @param $query - строка запроса. * @param $args - массив с параметрами SQL-запроса, для сопоставления. * @return int - возвращает идентификатор удаленной статьи из БД. */ public function delete($query, $args) { $pdo = $this->dbConnect(); $stmt = $pdo->prepare($query); $this->dataBinding($stmt, $args); $stmt->execute(); return $stmt->rowCount(); } } Может в нем где-то ошибка? Не пойму почему не отрабатывает insert, если фигурируют поля с типом DATETIME.
это в mysqli "?" думаю ошибка в несовпадении типа параметра. дата она такая дата! в любом случае, ОШИБКИ ИСПРАВЛЯЮТСЯ ПОСЛЕ ЧТЕНИЯ СООБЩЕНИЙ ОБ ОШИБКАХ. смотри чего там ругаеццо
Понятно. Да вроде не ругается она, скрипт отрабатывает и привет. Может логи какие глянуть? Насчет несовпадения типов я тоже думал. Я использую PDO:ARAM_INT и PDO:ARAM_STR. Это в функции dataBinding драйвера MySQL. А вот конкретно для datatime в PDO никакой константы нет.
Код (Text): $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); Можешь попробовать ошибку таким образом отлавить. Или посмотри как дебаг люди используют. Быстро найдешь ошибки. И в pdo то же