2013-03-09 42 views
1

我困在mysqli准备..我几乎所有,但确定没有在准备的声明中的错误。但即时通讯“调用非成员对象错误”..从我记得这个错误只发生如果事实上有一个错误的声明..“调用一个非对象的成员函数bind_param()”。我不是太肯定,如果我用任何的保留字..也许有人可以帮助..MYSQLi编写插入不工作..

$stmt = $mysqli->prepare("INSERT INTO customers (cid, company, fname, sname, email, mobile, email_notif, sms_notif, telephone, address, postcode, city, town, allowedLogin, date, addedby) 
          VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 

$stmt->bind_param("ssssssssssssssss", $id, $company, $fname, $sname, $email, $mobile, $emailnotif, $smsnotif, $telephone, $address, $postcode, $city, $town, $allowedLogin, $date, $addedby); 

    if($stmt->execute()) 
    { 
     /* Free Result Set */ 
     $stmt->close(); 
     return true;  
    } 
    else 
    { 
     return "<p>".$mysqli->error."</p>"; 
    } 

PS我通过一个函数调用传递变量:

addCustomer($company,$fname,$sname,$email,$mobile,$smsnotif,$emailnotif,$telephone,$address,$postcode,$city,$town,$allowedLogin, $date, $addedby); 
+0

这是因为它没有准备。绑定后使用'$ stmt-> error'来准备它,找出它为什么会导致该错误。此外,[根据文档](http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html),“日期”是一个保留字,但不需要勾出,不过,我会尝试将其作为故障排除的第一步。另外,根据数据库结构,如果'cid'是'auto_increment',那么也可能会导致错误,所以如果是这样,请尝试省略它。 – Jon 2013-03-09 00:27:41

+0

提示:为了处理huuuuuge数据集,请尝试PDO。将数组传递给此(并且在需要时使用命名参数)是一个巨大的好处。 – Amelia 2013-03-09 00:28:22

+0

每次通话后检查错误。之前的一个电话会失败,并且错误信息会有帮助。 – Barmar 2013-03-09 00:30:49

回答

0

我看到$id正在使用bind_param但未通过功能addCustomer

+0

如果它没有准备就没有区别。 – Jon 2013-03-09 00:25:21

1

datereserved word。尝试添加反引号。

+0

这在MySQL = v5.0文档 - http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html MySQL允许一些关键字被用作未加引号的标识符,因为很多人以前使用它们。“和”DATE“是列出的之一。 – Sean 2013-03-09 01:39:20