2012-09-04 158 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

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