在第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
答案 0 :(得分:0)
在第一个sql中缺少一个值
VALUES (
:ID,
:category, ---> inserted
:genre,
:rating,
:story_name,
:active)";
第二个是stmt2
而不是stmt我认为(也是绑定的)
答案 1 :(得分:0)
绑定到错误的PDO对象。您使用$ stmt-> bindParam()而不是$ stmt2-> bindParam();
只需在$ sql2查询中将$ stmt替换为$ stmt2。