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

Prepared statements getting ‘SQLSTATE[HY093]: Invalid parameter number: parameter was not defined’ PHP

在愉快地构建了三个复杂的 table 之后,我在两个小的 table 上遇到了 "Invalid parameter" 错误。我意识到这是一个高度重复的问题。我已经在这里和其他地方在线检查了数十个答案。

我从数据库中剪切并粘贴了名称,只是为了 100% 确定我没有遗漏任何拼写错误。我使用了区分大小写的搜索。我没有在占位符中使用任何禁用字符,我没有使用任何保留字。我已经三重和四重检查了占位符是否匹配。我已经 var_dumped 和 echoed 并且看起来一切正常。

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

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();
}

table非常直接

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`)
)

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" 

逗号不是命名参数的一部分。分隔 placeholders/values.

您的代码应该是:

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