繁体   English   中英

PDO错误:绑定变量不匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM