Как вставить данные в PDo - PullRequest
2 голосов
/ 17 октября 2010

Я использую PDO и не могу вставить некоторые данные:

используйте этот код:

$sql  = 'INSERT INTO `releases` (id, artists, release, label, catalog, date, tracklist, type, status, vote, votes_count) ';
$sql .= 'VALUES (:id, :artists, :release, :label, :catalog, :date, :tracklist, :type, :status, :vote, :votes_count)';

$query = $this->db->prepare($sql);

$query->bindParam(':id', 0, PDO::PARAM_INT);
$query->bindParam(':artists', implode('|||', $data['artists']), PDO::PARAM_STR);
$query->bindParam(':release', $data['release'], PDO::PARAM_STR);
$query->bindParam(':label', $data['label'], PDO::PARAM_STR);
$query->bindParam(':catalog', $data['catalog'], PDO::PARAM_STR);
$query->bindParam(':date', $data['date'], PDO::PARAM_STR);
$query->bindParam(':tracklist', $data['tracklist'], PDO::PARAM_STR);
$query->bindParam(':type', $data['type'], PDO::PARAM_STR);
$query->bindParam(':status', $data['status'], PDO::PARAM_INT);
$query->bindParam(':vote', 0, PDO::PARAM_INT);
$query->bindParam(':votes_count', 0, PDO::PARAM_INT);

$query->execute();

но данные не вставляются в базу данных. все имена проверены и действительны. идентификатор в качестве поля AUTO_INCREMENT.

если я использую этот код: $ this-> db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_WARNING); $ sql = 'INSERT INTO releases (исполнители, релиз, лейбл, каталог, дата, треклист, тип, статус, голосование, число голосов)'; $ sql. = 'VALUES (: исполнители,: релиз,: лейбл,: каталог,: дата,: список треков,: тип,: статус,: голосование,: voice_count)';

$query = $this->db->prepare($sql);

$array = array(':artists'   => implode('|||', $data['artists']),
               ':release'   => $data['release'],
               ':label'     => $data['label'],
               ':catalog'   => $data['catalog'],
               ':date'      => $data['date'],
               ':tracklist' => $data['tracklist'],
               ':type'      => $data['type'],
               ':status'    => $data['status'],
               ':vote'      => 0,
               ':votes_count' => 0);

$query->execute($array);

я получаю ошибку:
Предупреждение : PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'выпуском, меткой, каталогом, датой, списком треков, типом, статусом, голосованием, подсчетом голосов) в строке 1 в C: \ Program Files \ Wamp \ www \ предстоящий \ application \ controllers \ release.php on line 89

Ответы [ 3 ]

5 голосов
/ 17 октября 2010

date и type являются зарезервированными словами в mySQL.

Окружить имена полей обратными галочками:

INSERT INTO `releases` (`id`, `artists`, `release`, `label`, `catalog`,
`date`, `tracklist`, `type`, `status`, `vote`, `votes_count`) ';

или переименуйте их.

3 голосов
/ 17 октября 2010

, если ID является auto_increment, зачем указывать его в запросе вставки.Это не нужно и может быть причиной того, что вы не видите вставленную строку.

1 голос
/ 17 октября 2010

bindParam использует ссылочную семантику.Я не думаю, что вы можете использовать его для константы, как вы делаете со своими PDO::PARAM_INT строками.

Я никогда не использую bindParam, и я рекомендую вместо этого использовать bindValue.Или еще лучше - Передайте ассоциативный массив в execute.

...