准备好的语句获取'SQLSTATE [HY093]:参数号无效:参数未定义'PHP

时间:2016-01-04 03:44:22

标签: php mysql pdo prepared-statement

在愉快地构建三个复杂的表后,我在两个小表上遇到“无效参数”错误。我意识到这是一个高度重复的问题。我已经在网上和其他地方检查了几十个答案。

我已经从数据库剪切并粘贴了名称,以便100%确定我没有错过任何拼写错误。我使用了区分大小写的搜索。我没有在占位符中使用任何被禁止的字符,我没有使用任何保留字。我有三重和四重检查,占位符匹配。我有var_dump ed和echo ed以及所有应有的外观。

我已经将字符串转换为整数,尽管在以前的表中不需要这样。我确信这很简单,但我已经坚持了大约六个小时,只是看不出我错在哪里。由于两个简单的表都有问题我重新启动并重新启动但没有。我必须假设我做了一些愚蠢的事情,但我真的看不到它。

if ($_GET ['randomTime']== "yes") {

$sql = "INSERT INTO randomTime (
transmissionProgramID,
numberOfTimes,
minimumGap,
randomTimeType,
lastUpdate
) VALUES (
:transmissionProgramID,
:numberOfTimes,
:minimumGap,
:randomTimeType,
:lastUpdate
);";
$statement = $pdo->prepare($sql);

$numberOfTimes = intval($numberOfTimes);
$minimumGap = intval($minimumGap);
$transmissionProgramID = intval($transmissionProgramID);

var_dump($transmissionProgramID,$numberOfTimes,$randomTimeType, $minimumGap,$lastUpdate);

$statement->bindValue(':transmissionProgramID,', $transmissionProgramID);
$statement->bindValue(':numberOfTimes,', $numberOfTimes);
$statement->bindValue(':minimumGap,', $minimumGap);
$statement->bindValue(':randomTimeType,', $randomTimeType);
$statement->bindValue(':lastUpdate', $lastUpdate);
$result = $statement->execute();

$randomTimeID = $pdo->lastInsertId();
}

该表非常简单

CREATE TABLE `randomTime` (
`randomTimeID` INT(11) NOT NULL AUTO_INCREMENT,
`numberOfTimes` TINYINT(4) NOT NULL DEFAULT '1',
`minimumGap` SMALLINT(6) NOT NULL DEFAULT '60',
`randomTimeType` ENUM('average','fixed','maximum') NULL DEFAULT 'fixed',
`transmissionProgramID` INT(11) NOT NULL,
`lastUpdate` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`randomTimeID`),
UNIQUE INDEX `randomTimeID` (`randomTimeID`),
INDEX `FK_randomTime_transmissionProgram` (`transmissionProgramID`),
CONSTRAINT `FK_randomTime_transmissionProgram` FOREIGN KEY        
(`transmissionProgramID`) REFERENCES `transmissionProgram` (`transmissionProgramID`)
)

enter image description here

var_dump产生它应该的东西,例如:

string(3) "131" string(1) "2" string(7) "average" int(200) string(19) "2016-03-01 14:36:42"

之前我对所有内容intval进行了操作,现在显示

int(137) int(2) string(7) "average" int(60) string(19) "2016-03-01 17:33:32" 

1 个答案:

答案 0 :(得分:2)

逗号不是命名参数的一部分。那个分隔符占位符/值。

您的代码应为:

$statement->bindValue(':transmissionProgramID', $transmissionProgramID);
$statement->bindValue(':numberOfTimes', $numberOfTimes);
$statement->bindValue(':minimumGap', $minimumGap);
$statement->bindValue(':randomTimeType', $randomTimeType);
$statement->bindValue(':lastUpdate', $lastUpdate);