它显示已连接但插入语句不起作用。错误参数计数不匹配

时间:2016-05-27 13:34:03

标签: mysql qt

1.int main(int argc, char *argv[])
2.{
3.    QApplication a(argc, argv);
4.    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
5.    db.setHostName("localhost");
6.    db.setDatabaseName("test");
7.    db.setUserName("root");
8.    db.setPassword("12345678");
9.    if (!db.open())
10.    {
11.        qDebug()<< "Not Conn";
12.        return false;
13.    }
14.    else
15.    {
16.        qDebug()<<"connected";
17.        QSqlQuery qry;
18.        qry.prepare("insert into test.inter(id,cname)     
19.                     values(:id,:cname)");//id int, cname varchar(19)
20.        qry.bindValue(0,2);
21.        qry.bindValue(1,"far");
22.        if(qry.exec())
23.        {
24.            qDebug()<<"Inserted";
25.        }
26.        else
27.        {
28.            qDebug()<<qry.lastError().text();
29.            qDebug()<<qry.result();
30.            qDebug()<<qry.executedQuery();
31.        }
32.   }
33. }

2 个答案:

答案 0 :(得分:0)

将bindValues替换为:

$sth->bindValue(':id', 2, PDO::PARAM_INT);
$sth->bindValue(':cname', "far", PDO::PARAM_STR);

...或

将第19行替换为:

values(?, ?)");

所以尝试用以下代码替换20 - 21行:

qry.bindValue(":id:",2);
qry.bindValue(":cname","far");

答案 1 :(得分:0)

从准备好的语句中删除数据库名称。因为您在调用setDatabaseName时指定,所以不需要。 (查询中的数据库名称是导致误导性错误的原因)。将插入保留为:

qry.prepare("insert into inter(id,cname) values(:id,:cname)");