2012-01-12 115 views
1

下面的使用PDO的MYSQL INSERT命令只是失败。在失败并报告之后,DROP TABLE命令也失败。我只是不能有什么错的代码:/PHP:无法使用PDO插入到MYSQL表中

$sql = $db2->prepare(
'INSERT INTO citizens_12_01_12 
(login, rank, xp, level, citizenship, totalDamage, economySkill, damageToday, strength) 
VALUES 
(:login, :rank, :xp, :citizenship, :totalDamage, :economySkill, :damageToday, :strength)' 
); 
$sql->bindParam(':strength', $api->strength, PDO::PARAM_INT); 
$sql->bindParam(':damageToday', $api->damageToday, PDO::PARAM_INT); 
$sql->bindParam(':economySkill', $api->economySkill, PDO::PARAM_INT); 
$sql->bindParam(':totalDamage', $api->totalDamage, PDO::PARAM_INT); 
//$sql->bindValue(':organization', api->organization, PDO::PARAM_BOOL); 
$sql->bindParam(':citizenship', $api->citizenship, PDO::PARAM_STR); 
$sql->bindParam(':level', $api->level, PDO::PARAM_INT); 
$sql->bindParam(':xp', $api->xp, PDO::PARAM_INT); 
$sql->bindParam(':login', $api->login, PDO::PARAM_STR); 
$sql->bindParam(':rank', $api->rank, PDO::PARAM_STR); 

if ($sql->execute()) { 
    echo "Query succeeded."; 
} else { 
    echo "Query failed."; 
    $db2->query("DROP TABLE 'citizens_12_01_12'"); 
} 

跟踪误差在error_log中:55

PHP Warning: PDOStatement::execute() [<a href='pdostatement.execute'>pdostatement.execute</a>]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in .../getcitizens.php on line 55 

线是$ SQL->的execute()行

+0

你能后的错误?如果没有(通过GUI输出给您),请检查您的错误日志。 – 2012-01-12 01:43:07

+0

更新OP错误 – 2012-01-12 01:46:02

回答

6

你是在insert语句中缺少变量:level

它应该是:

$sql = $db2->prepare(
'INSERT INTO citizens_12_01_12 
(login, rank, xp, level, citizenship, totalDamage, economySkill, damageToday, strength) 
VALUES 
(:login, :rank, :xp, :level, :citizenship, :totalDamage, :economySkill, :damageToday, :strength)' 
); 
+1

耶稣。这就是为什么我不应该在接近2点的时候编码!非常感谢你。 – 2012-01-12 01:48:53

+2

@ J.B。我明白这感受... – jeroen 2012-01-12 01:51:43