2014-11-15 40 views
0

EDITED!INSERT INTO mysqli返回非對象

一直在尋找類似問題的帖子,但似乎無法找到適用於我的情況的答案 - 希望你們能夠提供幫助。

更新:根據輸入更新了我的代碼 - 謝謝!我正在看到進度,但是:

現在,下面我只在INSERT INTO在while -loop內調用時纔得到錯誤Call to a member function bind_param() on a non-object

(裏面的代碼手動送入變量時)內的while循環$ stmtGemNyVaegtOgRepsSet失敗,上述錯誤消息只有當$ stmtTjekFindesOevelse,$ stmtFindOevelsesID和$ stmtGemNyVaegtOgRepsSet工作本身細。

$ stmtFindOevelsesID將始終返回一個整數(id)。如果沒有這樣的ID,它將被if ($stmtTjekFindesOevelse->num_rows() > 0)發現,代碼將不會運行。

想有與while循環的問題 - 只是不知道在這種情況下要使用的替代...

$navn = 'Brystpres'; 
    $vaegt = 10; 
    $reps = 11; 
    $antalGangeUdfoert = 11; 

    global $mysqli; 

     $stmtTjekFindesOevelse = $mysqli->prepare("SELECT * FROM oevelser WHERE navn=?"); 
     $stmtTjekFindesOevelse->bind_param("s", $navn); 
     $stmtTjekFindesOevelse->execute(); 
     $stmtTjekFindesOevelse->store_result(); 

if ($stmtTjekFindesOevelse->num_rows() > 0) 
{ 

    $stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?"); 
    $stmtFindOevelsesID->bind_param("s", $navn); 
    $stmtFindOevelsesID->execute(); 
    $stmtFindOevelsesID->bind_result($oevelsesID); 

while ($stmtFindOevelsesID->fetch()) { 


$stmtGemNyVaegtOgRepsSet = $mysqli->prepare("INSERT INTO vaegtogreps (oevelsesreference, vaegt, reps, antalgangeudfoert) VALUES (?, ?, ?, ?)"); 

    $stmtGemNyVaegtOgRepsSet->bind_param("idii", $oevelsesID, $vaegt, $reps, $antalGangeUdfoert); 

    $stmtGemNyVaegtOgRepsSet->execute(); 
} 
} 

回答

3

您正在使用錯誤的identifiers作爲列。

('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert') 

通過除去引號將列名

(oevelsesreference, vaegt, reps, antalgangeudfoert) 

或使用反引號:

(`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`) 

曾使用錯誤檢查您的查詢就會暗示。

變化:

$stmtGemNyVaegtOgRepsSet->execute(); 

到:

if(!$stmtGemNyVaegtOgRepsSet->execute()){ 
trigger_error("There was an error....".$mysqli->error, E_USER_WARNING); 
} 

爲了得到該錯誤的原因。


編輯:

我相信我找到了解決辦法,這爲我工作,並將其插入下面的「vaegtogreps」表。

 
oevelsesreference vaegt reps antalgangeudfoert 
     1    10  11   11 

您需要使用store_result()作爲第二個SELECT。

只需添加$stmtFindOevelsesID->store_result();它:

$stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?"); 
$stmtFindOevelsesID->bind_param("s", $navn); 
$stmtFindOevelsesID->execute(); 
$stmtFindOevelsesID->bind_result($oevelsesID); 

// added and working 
$stmtFindOevelsesID->store_result(); 
+0

謝謝 - 引號實際上是作爲測試添加的,但是感謝您指出我需要使用反引號。以前嘗試沒有(現在用正確的反引號)位仍然得到相同的錯誤。任何其他想法? –

+0

@ErikLassen不客氣。你確定'$ mysqli'是你的數據庫連接嗎?很多時候,這是因爲與數據庫連接不好。 –

+0

@ErikLassen'$ stmtGemNyVaegtOgRepsSet-> conn-> error;'看起來不正確,請嘗試刪除它。 –

2

的問題是你的插入語句:

INSERT INTO vaegtogreps ('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert') 
         ^    ^^ ^^ ^^    ^

列的引號是反引號不單引號:

 
`column1`, `column2` // backticks 

因此,要麼你省略它們,要麼使用反引號:

INSERT INTO vaegtogreps (`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`) VALUES (?, ?, ?, ?) 
+1

愛的圖形功能;)天兒真好鬼。來自我的+1,*歡呼聲*不知道你也在制定答案。 –

+0

謝謝 - 引號實際上是作爲測試添加的,但感謝您指出我需要使用反引號。以前嘗試沒有(現在用正確的反引號)位仍然得到相同的錯誤。任何其他想法? –

+0

@ErikLassen多數民衆贊成在,你確定這是你唯一的代碼? – Ghost

0

關於到你的錯誤:
Fatal error: Call to a member function bind_param() on a non-object

Trying to get property of non-object
看來你沒有正確實例化你的mysqli連接。

嘗試那樣做,因爲這裏的PHP Doc提到:

$mysqli = new mysqli("dbhost", "dbuser", "dbpass", "dbname"); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 
+1

OP狀態*「SELECT工作正常,順便說一句。」*所以,它似乎不是一個連接錯誤。 –