插入语句无法使用PDO扩展的execute(array()) [英] Insert statement not working using execute(array()) of PDO Extension
问题描述
$stmt = $conn->prepare("INSERT INTO user VALUES ('',:username,md5(:password),'',1,'','',:email,'',0,0,'',:cover,:dateofbirthYear:dateofbirthMonth:dateofbirthDay,NOW(),:sex,:country)");
$stmt->execute(array(
':username' => $username,
':password' => $password,
':email' => $email,
':cover' => $cover,
':dateofbirthYear' => $dateofbirthYear,
':dateofbirthMonth' => $dateofbirthMonth,
':dateofbirthDay' => $dateofbirthDay,
':sex' => $sex,
':country' => $country
));
由于某种原因,此插入语句不起作用.我在PDO中是个新手,所以对此我不太了解.我在做什么错了?
For some reason this insert statement is not working. I am very new in PDO so I do not know much about it. What am I doing wrong?
此陈述给我这个错误:
致命错误:/home/manga/public_html/new/register.php:80堆栈中,消息为"SQLSTATE [HY093]"的未捕获异常"PDOException":无效参数编号:绑定变量的数量与令牌的数量不匹配跟踪:
#0/home/manga/public_html/new/register.php(80):PDOStatement-> execute(Array)
#1 {main}在第80行的/home/manga/public_html/new/register.php中抛出
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /home/manga/public_html/new/register.php:80 Stack trace:
#0 /home/manga/public_html/new/register.php(80): PDOStatement->execute(Array)
#1 {main} thrown in /home/manga/public_html/new/register.php on line 80
推荐答案
您以错误的方式准备了查询
You have prepared your query in the wrong way
INSERT INTO user VALUES ('',:username,md5(:password),'',1,'','',:email,'',0,0,'',
:cover,:dateofbirthYear:dateofbirthMonth:dateofbirthDay,NOW(),:sex,:country
// ^ These need to either single or separated
对于您要尝试的操作,您可以通过这种方式完成
For what you are trying, you can do it this way
//Prepare the date of birth earlier
$dob = $dateofbirthYear.$dateofbirthMonth.$dateofbirthDay;
//Then pass it as a single $variable
$stmt = $conn->prepare("INSERT INTO user VALUES ('',:username,md5(:password),'',1,'','',:email,'',0,0,'',:cover,:dob,NOW(),:sex,:country)");
$stmt->execute(array(
':username' => $username,
':password' => $password,
':email' => $email,
':cover' => $cover,
':dob' => $dob, // <-- Problem solved
':sex' => $sex,
':country' => $country
));
// Then it will execute
这篇关于插入语句无法使用PDO扩展的execute(array())的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!