2012-09-04 96 views
0

Possible Duplicate:
Call to a member function bind_param() on a non-objectPHP MySQL的预处理语句错误

,我发现了以下错误:

Call to a member function bind_param() on a non-object 

这里是准备好的声明:

include('/path/to/connection/variable.php'); 

该文件被证实是工作,它只是创造mysqli类的一个实例,例如:

$mysqli = new mysqli("localhost", "user", "password", "db"); 

所以我知道这不是问题......

$stmt = $mysqli->prepare("INSERT INTO `users` VALUES (?,?,?,?,?,?,?)"); 
$stmt->bind_param("sssssss", $firstname, $lastname, $email, $subscribed, $signup_date, $unsubscribe_date, $signup_source); 
$stmt->execute(); 
$stmt->close(); 
$mysqli->close(); 

变量类型如下:

$firstname = string 
$lastname = string 
$email = string 
$subscribed = char (Y or N) 
$signup_date = DATE - date('Y-m-d') 
$unsubscribe_date = DATE - 0000-00-00 Entered Initially 
$signup_source = string 

我试图找到所有通常的嫌疑人,检查连接,基本上我写了一个单独的SELECT语句,它的工作原理。 “用户”是一个有效的表格。连接的权限是root,所以这不是问题。我已经在“s”和“d”之间切换了日期类型,甚至用虚拟变量尝试了所有内容 - 没有区别。

我希望这是一件简单的事情 - 因为我现在在过去的一个小时里一直在绞尽脑汁,而且我看不到上面的语句有什么问题。

+0

啊 - 我收到''上FALSE'的var_dump($语句)',这是何等的混乱我,因为该语句有正确的语法,这是一个正确的表,并且字段计数是正确的,等等。 –

+0

编辑:我发现问题 - 我错过了一个插入字段 - 该死的时候我讨厌它是如此简单。 ...在一个相关的,因为我不是最好的与mySQL有一种方法,我可以针对INSERT只有几个领域 - 即排除在语句中的尾部字段? –

回答

4

这通常意味着您的->prepare()调用失败,并返回布尔值FALSE而不是语句对象。检查认为:

$stmt = $mysqli->prepare("INSERT INTO `users` VALUES (?,?,?,?,?,?,?)") or die($mysqli::error); 
+0

它是 - 我做了一个'var_dump($ stmt)'并且它返回'FALSE',所以我很茫然,因为这个陈述看起来是正确的。 –

+1

检查$ mysqli ::错误的原因。 –

+0

我发现了这个问题 - 我错过了INSERT上的一个字段 - 该死的时候我讨厌它什么时候这么简单...... –

1

在回答你的问题,你可以做到以下几点:

INSERT INTO tableName (column1, column2, column3,...) 
VALUES (value1, value2, value3,...) 
+0

看起来我有7个,第一个“变量”包含字段类型。 –

+0

啊..谢谢你,先生 - 我知道有一种方法! –