2016-04-08 4 views
0

Hallo Ich versuche derzeit, meine PHP-Datei mit einer Datenbank zu verbinden, aber aus irgendeinem Grund bekomme ich diesen Fehler zurückgegeben, um mich zu versuchen, die Eigenschaft von Nicht-Objekt zu erhalten. Dies scheint ein Problem mit der Abfrage selbst zu sein, wie es aus Zeile 23 kommt, aber ich kann nicht für das Leben von mir das Problem sehen. Hier ist mein Code jede Hilfe würde sehr geschätzt werden.Versuch, Eigenschaft von non-object, prepared statement

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
include("dbconnect.php"); 
//get first 3 months 
$month = '%'.$_POST['month'].'%'; 
//month 1 and 2 are currently not in use till issue is fixed 
$month2 = '%'.$_POST['month'].'%'; 
$month3 = '%'.$_POST['month'].'%'; 
echo $month; 

      //connect to database and prepare mysqli statement to get day, title, details, time and location if month has any details 
      //will be adding more details for this statement to get once it is fully tested 
      if($connect->connect_errno){ 
       printf("connection failed, please try again and if this error occurs again please submit this bug through the contact us page", $connect->connect_error); 
       exit(); 
      } 
      $CalendarDetails = $connect->prepare("SELECT `date`, `time`, `title`, `details`, `eventLocation`, `longitude`, `latitude` FROM `calendar` WHERE `date` LIKE ?"); 
      //$CalendarDetails = $connect->prepare("SELECT date, time, title, details, eventLocation, longitude, latitude FROM calendar WHERE date LIKE ?"); 
      //check if connection succeeded 
      //if (false===$CalendarDetails) { 
       //error occurs in line below 
      // die('failed error 1 ' . htmlspecialchars($CalendarDetails->error)); 
      //} 
      //bind the month to the prepared statement 

      $CalendarDetails->bind_param("s", $month); 
      //check if failed 
      //if (false===$CalendarDetails) { 
      // die('failed error 2 ' . htmlspecialchars($CalendarDetails->error)); 
      //} 
      //execute query 
      $CalendarDetails->execute(); 
      //check if failed 
      //if (false===$CalendarDetails) { 
      // die('failed error 3 ' . htmlspecialchars($CalendarDetails->error)); 
      //} 
      //store results 
      $CalendarDetails->store_result(); 
      //if (false===$CalendarDetails) { 
      // die('failed error 4 ' . htmlspecialchars($CalendarDetails->error)); 
      //} 
      //bind results to separate variables 
      $CalendarDetails->bind_result($date, $time, $title, $details, $time, $location, $longitude, $latitude); 
      //get results 

      if($day != null){ 
      if($month != null){ 
       //create an array to store results and send to app 
       //$Allevents = array(); 
       $i = 0; 
       $event[$i] = array(); 
       while($CalendarDetails->fetch()){ 
       $j = strval($i); 
       //this will combine all results into one string and will be split into an array in java 
       $event[$j] = $date. "|". $title. "|". $details. "|". $time. "|". $location. "|". $longitude. "|". $latitude; 
       /*$event['day'][$i] = $day; 
       $event['title'][$i] = $title; 
       $event['details'][$i] = $details; 
       $event['time'][$i] = $time; 
       $event['location'][$i] = $location; 
       $event['longitude'][$i] = $longitude; 
       $event['latitude'][$i] = $latitude;*/ 
       //$Allevents[$i] = $event; 
       $i++; 
       } 


       echo json_encode($event); 
       mysqli_stmt_close($CalendarDetails);  
      }else{ 
       echo "month not sent from app"; 
      } 
      }else{ 
       echo "no events this month"; 
      } 

?> 

Update mit DBConnect Datei Code

$connect= new mysqli("127.0.0.1",$config['username'],$password,$config['dbname'], 3306); 

Update 2 Ich habe die auf die Abfrage beziehen, wenn Aussagen kommentiert und ich jetzt einen ähnlichen Fehler in Zeile 26 erhalten, die

$CalendarDetails->bind_param("s", $month); 
ist

Der Fehler, den ich jetzt empfange, ist: Aufruf einer Memberfunktion bind_param() für ein Nicht-Objekt

Update 3 Der Grund, warum meine Prepare-Anweisungen fehlgeschlagen sind, lag an einem Rechtschreibfehler, der Kalender in meiner Datenbank wurde falsch geschrieben.

+2

'$ ereignis [$ j] = $ datum +" | " + ... das sollten Punkte sein und keine Pluszeichen. –

+1

"wie es von Linie 20 kommt" - was ist Linie 20? – FuzzyTree

+0

danke, ich werde das jetzt ändern, mischen php Verkettung mit Java haha. – noob

Antwort

0

Das Bit des Codes, das den Fehler verursacht, ist dieser: $CalendarDetails->error. Der einzige Weg, um zu erreichen, wie von Ihrer Logik diktiert, ist, wenn diese Bedingung erfüllt ist: if (false===$CalendarDetails). Das bedeutet, dass $CalendarDetailsfalse ist. false ist ein boolesches Objekt und kein Objekt. Wenn Sie also $CalendarDetails->error tun (was effektiv in false->error übersetzt wird), versuchen Sie, eine Eigenschaft (error) eines Nicht-Objekts (false) zu erhalten.

+0

Nein, meine Logik basierte auf der Tatsache, dass Variablen auf PHP dynamisch sind, mit anderen Worten, Sie müssen ihren Typ nicht deklarieren, also nahm ich an, dass wenn die Abfrage fehlgeschlagen wäre, sie ein Boolesches Objekt anstelle eines Objekts ausgeben würde. Auch ich habe keine Ahnung, wie man Fehler auf php überprüfen kann, das ist genau das, was ich gefunden habe, arbeitete für andere Leute. Ich habe diese Methode zuvor in anderen PHP-Dateien verwendet (Beispiele für Datei sind verfügbar, wenn Sie möchten) und es schien nie, die if-Anweisung einzugeben, so dass ich angenommen habe, dass es funktioniert. – noob

+0

Ich werde sie sowieso aus meiner Datei entfernen, aber vorerst möchte ich wissen, warum sie die if-Anweisung in den jeweiligen Fall eingibt und nicht in anderen Fällen, die ziemlich genau dasselbe tun. – noob

+0

Markieren Sie dies als die richtige Antwort für Leute, die ein ähnliches Problem haben können. Während es nicht stimmt was mit meiner Datei nicht stimmt (warum die Prepare-Anweisung fehlgeschlagen ist) war es die Frage, die ich eigentlich gestellt habe (aufgrund meiner eigenen Unwissenheit ha) Du hast es das Problem perfekt gefragt danke erklärt. – noob

Verwandte Themen