【发布时间】:2017-03-27 03:25:18
【问题描述】:
我正在使用 PDO 将一些数据推送到我的 MySQL 服务器,表名为“用户”,我收到以下错误:
[26-Mar-2017 22:18:21 America/Chicago] Could not successfully add user!
[26-Mar-2017 22:18:21 America/Chicago] SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
我查看了有关堆栈溢出的多个其他问题,并带有相同的错误消息,归结为 PDO 准备和执行参数不匹配。但是,我的准备和执行是匹配的,我已经检查了很多次,但我仍然收到错误。这是我的代码:
$noMusicScore = $data->noMusicScore;
$classicalMusicScore = $data->classicalMusicScore;
$popMusicScore = $data->popMusicScore;
$hiphopMusicScore = $data->hiphopMusicScore;
try
{
$db = new PDO('info here......');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->prepare("INSERT INTO User (no-music-score, classical-music-score, pop-music-score, hiphop-music-score)
VALUES (:no-music-score, :classical-music-score, :pop-music-score, :hiphop-music-score)");
$query->execute(array(':no-music-score' => $noMusicScore, ':classical-music-score' => $classicalMusicScore,
':pop-music-score' => $popMusicScore, ':hiphop-music-score' => $hiphopMusicScore));
error_log("Successfully added user!");
}
catch(PDOException $e)
{
error_log("Could not successfully add user!");
error_log($e->getMessage());
}
unset($db, $query);
【问题讨论】:
-
该线程中的答案或 cmets 都不应该与此相关吗?似乎所有参数都存在。我建议进一步简化查询,只使用 :pop、:classical 等。只是为了确保命名没有问题。不过,它看起来确实正确。
-
尝试 echo for
$query是否提供所需的查询? -
不要使用破折号作为占位符名称。仅限 A-Z、数字和下划线。