2013-04-26 114 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