[英]pdo update using bindParam show the error number of bound variables does not match number of tokens
[英]PDO error: bound variables do not match
在第33和54行上得到这些错误(我的语句执行两个查询的行),但不确定为什么。 看起来我的绑定变量全部对齐。 有什么想法吗?
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens... on line 33
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens... on line 54
另外,我担心这是否会起作用,并且绑定是否将接受具有正确值的$ SID2变量,但直到解决以上错误后才能知道:$ SID = $ dbh-> lastInsertId(); $ SID2 = $ SID;
以下是相关代码:
$dbh = new pdo('mysql:host='.$hostName.';dbname='.$dataBaseName, $user, $pass);
if(isset($_POST ['submit'])){
$user_ID = get_current_user_id();
$sql = "INSERT INTO stories(ID,
category,
genre,
rating,
story_name,
active) VALUES (
:ID,
:genre,
:rating,
:story_name,
:active)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':ID', $user_ID, PDO::PARAM_STR);
$stmt->bindParam(':category', $_POST['category'], PDO::PARAM_STR);
$stmt->bindParam(':genre', $_POST['genre'], PDO::PARAM_STR);
$stmt->bindParam(':rating', $_POST['rating'], PDO::PARAM_STR);
$stmt->bindParam(':story_name', $_POST['story_name'], PDO::PARAM_STR);
$stmt->bindParam(':active', $a = 0, PDO::PARAM_STR);
$stmt->execute(); //line 33---error line
$SID = $dbh->lastInsertId();
$SID2 = $SID;
$sql2 = "INSERT INTO writing(ID,
SID,
text,
position,
approved) VALUES (
:ID,
:SID,
:text,
:position,
:approved)";
$stmt2 = $dbh->prepare($sql2);
$stmt->bindParam(':ID', $user_ID, PDO::PARAM_STR);
$stmt->bindParam(':SID', $SID2, PDO::PARAM_STR);
$stmt->bindParam(':text', $_POST['text'], PDO::PARAM_STR);
$stmt->bindParam(':position', $b = 0, PDO::PARAM_STR);
$stmt->bindParam(':approved', $c = 0, PDO::PARAM_STR);
$stmt->execute(); //line 54--error line
在第一个sql中缺少一个值
VALUES (
:ID,
:category, ---> inserted
:genre,
:rating,
:story_name,
:active)";
第二个应该是stmt2
而不是我认为的stmt(也是bind`s)
在您的sql2中,您绑定到错误的PDO对象。 您使用$ stmt-> bindParam()代替$ stmt2-> bindParam();
只需在$ sql2查询中将$ stmt复制为$ stmt2即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.