如何在PDo中插入数据

时间:2010-10-17 17:54:45

标签: php mysql insert pdo

我使用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();

但数据未插入数据库。所有名称都已检查且有效。 id为AUTO_INCREMENT字段。

如果我使用此代码:     $ this-> db-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_WARNING);     $ sql ='INSERT INTO releases(艺术家,发行,标签,目录,日期,跟踪列表,类型,状态,投票,投票_count)';     $ sql。='VALUES(:artists,:release,:label,:catalog,:date,:tracklist,:type,:status,:vote,:votes_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服务器版本对应的手册,以便在 C:\ Program Files中第1行的'release,label,catalog,date,tracklist,type,status,vote,votes_count)VALUE'附近使用正确的语法\ Wamp \ www \ forthcoming \ application \ controllers \ release.php 在线 89

3 个答案:

答案 0 :(得分:5)

mySQL中的

datetypereserved words

用反引号围绕字段名称:

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

或重命名。

答案 1 :(得分:3)

如果ID是auto_increment,为什么要在insert查询中指定它。这不是必需的,可能是您没有看到插入行的原因。

答案 2 :(得分:1)

bindParam使用引用语义。我不认为你可以在常数上使用它,就像你使用PDO::PARAM_INT行一样。

我从不使用bindParam,我建议您改用bindValue。或者更好 - 将关联数组传递给execute