2013-04-26 112 views
2

我的下一個PHP代碼:mysqli->執行出現錯誤,但沒有輸出錯誤

<?php 
     mysqli_report(MYSQLI_REPORT_ALL); 
     $mysqli = new mysqli("localhost","mybd","mypass"); 
     if ($mysqli->connect_errno) { echo "Error connect<br/>"; } 
     else { 
      $mysqli->select_db("database1"); 

      if ($result = $mysqli->query("SELECT DATABASE()")) { 
       $row = $result->fetch_row(); 
       printf("Default database is %s.\n", $row[0]); // shows correct database selected 
       $result->close(); 
      } 

      $sentencia = $mysqli->prepare("select pass from users Where name ='ronald'"); 

      echo "Prepare error:".$mysqli->error."<br/>"; 

      if (!$sentencia) echo "<br/>sentencia is null<br/>"; 

      if ($sentencia->execute) 
      { 
       $sentencia->bind_result($cpass); 
       $sentencia->fetch(); 
       echo "Passwd:".$cpass."<br/>";  
       $con="checkpass"; 
       if (($con!=$cpass) && (md5($con)!=$cpass)) 
       { 
         echo "OK<br/>"; 
       } 
       else echo "NO OK<br/>"; 
      } 
      else echo "<br/>Error execute: ".$mysqli->error; 
    } 
    mysqli_report(MYSQLI_REPORT_OFF); 
?> 

的問題是: - $ mysqli->錯誤顯示什麼。沒有錯誤。總是空的字符串。 - $ sentencia-> execute總是返回null,然後總是回顯「Error execute:」,但沒有關於錯誤的信息。

數據庫選中顯示ok。它選擇正確的數據庫。這是一個例子。真的名字是通過「$ sentencia-> bind_param(」s「,$ user)傳遞的;」但有了這個,我得到了「無對象」的Apache錯誤。 我不知道爲什麼會發生。 SQL被檢查並確定。 謝謝。

+0

它不應該是'$ sentencia-> error',因爲它是語句的錯誤,不DB連接? – Passerby 2013-04-26 10:24:57

+0

嗨。不,你可以在這裏看到:http://php.net/manual/en/mysqli.error.php,但我也嘗試了$ sentencia->錯誤和相同的問題。沒有錯誤。 – briast 2013-04-26 10:31:11

+0

檢查user1602889的回答。 – Passerby 2013-04-26 10:43:30

回答

2

不應該執行一個函數或屬性? http://php.net/manual/en/mysqli-stmt.execute.php

if ($sentencia->execute()) 
{ 

} 
+0

謝謝。那是錯誤。 – briast 2013-04-26 11:14:49

+0

我現在的另一個問題是我改變了「$ mysqli-> prepare」來獲取參數:$ sentencia = $ mysqli-> prepare(「select pass from users where name ='?'」);在這之後,我會做「if(!$ sentencia-> bind_param(」s「,$ usuf))echo」Error bind:「。$ sentencia-> error;」然後我得到apache錯誤「PHP致命錯誤:調用一個非對象的成員函數bind_param()」。爲什麼? – briast 2013-04-26 11:20:02

+0

看起來像你的準備狀態失敗,$ sentencia是假的不是一個對象。我檢查了php.net,看起來你在準備聲明中並不需要單引號。 – 2013-04-26 11:41:09