我一整天都坚持这个简单的准备陈述:
// $conn it's my PDO Object
// and $intervention my params'array
$s = $conn->prepare("INSERT INTO intervention(firm_id,category,subject,amount,start_date,end_date) VALUES(:firm_id,':category',':subject',:amount,':start_date',':end_date')");
$result = $s->execute(array(
'firm_id' => $firm_id ,
'category' => $intervention["category"] ,
'subject' => $intervention["subject"] ,
'amount'=> $intervention["amount"] ,
'start_date'=> $intervention["start_date"],
'end_date'=>$intervention["end_date"]
));
执行 会给我:
警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:: category
有人可以帮我理解这个简单代码有什么问题吗?
答案 0 :(得分:2)
在这部分查询中:
VALUES(:firm_id,':category',
:category
被视为文字字符串而不是参数名称,因为它包含了引号。
参数名称周围不应有引号,如:
...VALUES(:firm_id, :category,...
查询其余部分的其他非数字参数也存在同样的错误。
答案 1 :(得分:1)
参数名称不应该有引号。准备好的声明将正确地进行替换。还要注意在查询中写入的参数数量以及在execute方法上绑定的内容。