2014-04-02 121 views
-1

此腳本用於與Android應用PHP - 致命錯誤:調用一個成員函數bind_param()一個非對象 -

錯誤: 2致命錯誤:調用一個成員函數bind_param()在非對象中**在線36

在我的腳本中有三個sql查詢,第一個是正確運行,但另外兩個不是。

我真的不明白爲什麼,因爲我做的都是同樣的東西...


PHP


<?php 
ini_set("display_errors", 1); 
error_reporting(E_ALL); 

$con = mysqli_connect("******","******","******","******"); 

// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
else { 
    // If all the input are ok 
    if(isset($_REQUEST['firstName']) AND isset($_REQUEST['lastName']) AND isset($_REQUEST['phone']) AND isset($_REQUEST['linkedPhone']) AND isset($_REQUEST['imei'])) { 

     $firstname = $_REQUEST['firstName']; 
     $lastName = $_REQUEST['lastName']; 
     $phone = $_REQUEST['phone']; 
     $linkedPhone = $_REQUEST['linkedPhone']; 
     $imei = $_REQUEST['imei']; 

     $req = $con->prepare('SELECT idUser FROM user WHERE phone = ?'); 
     $req->bind_param("s", $_REQUEST['linkedPhone']); 
     $req->execute(); 
     $req -> bind_result($idFollowed); 
     $result = $req->fetch(); 
     $idFollowed = "".$idFollowed; 
     echo $idFollowed; 
     // if linkedPhone doesn't exist 
     if(!$result) { 
      $return['result'] = "Linked phone doesn't exist"; 
     } 
     else { 
      $req2 = $con->prepare('INSERT INTO user (firstName, lastName, phone, idFollowed, imei) VALUES (?, ?, ?, ?, ?)'); 
      // Work using phpMyAdmin 
      // INSERT INTO user (firstName, lastName, phone, idFollowed) VALUES ('Gael', 'Fontenelle', '', '1'); 
      $req2->bind_param("sssss", $_REQUEST['firstName'], $_REQUEST['lastName'], $_REQUEST['phone'], $idFollowed, $_REQUEST['imei']); // ERROR HERE 
      $req2->execute(); 
      // Find the id of the new user 
      $req3 = $con->prepare('SELECT idUser FROM user WHERE phone = ?'); 
      $req3->bind_param("s", $_REQUEST['phone']); // ERROR HERE 
      $req3->execute(); 
      $req3 -> bind_result($idUser); 
      $result = $req->fetch(); 
      if(!$result) { 
       $return['result'] = "Error in the registration process"; 
      } 
      else { 
       $return['result'] = "".$idUser; 
      } 
     } 
    } 
    else { 
     // Display the error 
     $return['result'] = "Missing data!"; 
    } 
    echo json_encode($return); 
} 
mysqli_close($con); 
?> 

SQL


CREATE TABLE user (
    idUser int NOT NULL auto_increment, 
    firstName varchar(50) NOT NULL, 
    lastName varchar(50) NOT NULL, 
    phone varchar(50) NOT NULL, 
    idFollowed int default 0, -- 0 if it's the primary user 
    validation boolean NOT NULL, default 0, -- 1 = VALIDATION OK 
    imei varchar(50) NOT NULL, 
    PRIMARY KEY (idUser), 
    FOREIGN KEY (idFollowed) REFERENCES idUser (user) 
); 

INSERT INTO user (firstName, lastName, phone, imei) VALUES 
    ('Steve', 'Jobs', '0836656565651', '23456789765'), 
    ('Steve', 'Wozniak', '0836656565652', '23456789765'), 
    ('Bill', 'Gates', '0836656565653', '23456789765'), 
    ('Steve', 'Balmer', '0836656565654', '23456789765'), 
    ('Larry', 'Pagen', '0836656565655', '23456789765'), 
    ('Serguei', 'Brin', '0836656565656', '23456789765'); 
+1

的[調用成員函數綁定\ _Param()一個非對象]可能重複(http://stackoverflow.com/questions/4488035/call-to- a-member-function-bind-param-on-a-non-object) – CBroe

+0

首先檢查這個執行是否達到您滿意的條件?可能可能它還沒有達到,嘗試echo - die()在您的預期條件 – SagarPPanchal

回答

0
$req2->bind_param("sssis",$_REQUEST['firstName'], $_REQUEST['lastName'], $_REQUEST['phone'], $idFollowed, $_REQUEST['imei']); 

你的第四個參數INT替換成「SSSSS」到「sssis」

+0

我不認爲這是問題,因爲我解析它: $ idFollowed =「」。$ idFollowed; 即使我刪除了第二個查詢,我也遇到了第三個同樣的問題...:s – user3489134

+0

$ idFollowed = $ idFollowed ;,不需要「」。 –

+0

該方法失敗,因爲它在非對象上調用 – Kimutai

0

這意味着,你的SQL查詢失敗,原因是一個錯誤。在這裏,你對如何設置連接以及$ con對象有一個問題。那麼試試這個

$con = new mysqli("myhost","myusrname","mypwd","mydb"); 

/*then check connection */ 

if($con->connection_error) 
{ 

    die("error in connecting to database"); 
} 
/*Proceed with the rest here */ 

你忘了

new 

關鍵字

您還可能在現場準備SQL錯誤。您可以檢查錯誤這樣

$resq = $con->prepare("......"); 
if(!$resq) 
{ 
    die("prepare failed ".$con->error); 
} 
+0

它不會改變任何內容: 2致命錯誤:調用第36行****中的非對象上的成員函數bind_param()我認爲新的mysqli()或mysqli_connect()...像相當於 我不知道原因我使用相同類型的東西做許多查詢之前,像你可以看到我試圖顯示idFollowed,它的工作,所以如果第一個查詢工作正常我不認爲這是de $ con的問題:s – user3489134

+0

然後如果你100%確定你的連接沒問題,那麼比prepare()中的sql查詢由於查詢錯誤而失敗。我剛剛編輯了我的答案,看看如何檢查發生的SQL錯誤 – Kimutai

相關問題