使用bind_param从数据库中获取结果,prepare语句和fetch不起作用

时间:2014-01-05 00:37:43

标签: php mysql object select mysqli

我需要帮助才能使最后一个功能正常工作。数据库连接正常。函数display_all($ id)不起作用。当我调用它时它不会显示结果,因为您可以从创建的新瞬间看到下面的内容。请有人帮助我。感谢

<?php



    class connect_dbase


    {
        public function connection($host="localhost",$user="root",$password="london",$db_name="users")

        {

            $mysqli=new mysqli($host,$user,$password,$db_name);
            if ($mysqli->connect_error) {
        die('Connect Error: ' . $mysqli->connect_error);

            }
            else 

            {

                echo " Database connection successful";


            }

        }



         public function display_all($id)
    {
    if($stmt = $mysqli->prepare("SELECT name,email,address FROM user WHERE id =?"))
    {

    /* bind parameters for markers */
        $stmt->bind_param('i',$id);

        /* execute query */
        $stmt->execute();

    if($stmt->num_row() >0)


    {
        $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // do something with $row

        echo $row['name']. $row['email']. $row['address'];
    }  




        }

    else
    {  echo "no result found";}




    }

       else
       {

           echo "cant prepare result";

       }

    }





    }
    $connect_dbase=new connect_dbase();

    $connect_dbase->connection();

    $connect_dbase->display_all(3);






    ?>

3 个答案:

答案 0 :(得分:0)

你的mysqli对象不在实例范围内,我不知道为什么你没有收到任何警告。由于您在OO模式下使用它,您需要将它声明为您正在使用它的类,因此它知道要去哪里。

class connect_dbase {

    private $mysqli;

然后看起来是创建连接对象的构造函数。

public function connection($host="localhost",$user="root",$password="london",$db_name="users")
{
    $this->mysqli=new mysqli($host,$user,$password,$db_name);
//rest of your code

然后,您需要访问mysqli对象的任何其他地方只需调用$ this-&gt; mysqli即可在您的实例中访问它。

答案 1 :(得分:0)

首先,您需要声明私有或公共类变量$ mysqli

class connect_dbase {
    private  $mysqli;
...

比你使用这样的变量:

public function display_all($id) {
    if($stmt = $this->mysqli->prepare("SELECT... 

答案 2 :(得分:0)

$ mysqli 变量超出 display_all 方法的范围。 您应该使用类变量:

class connect_dbase{

    private $mysqli; //Or public/protected

    public function connection($host="localhost",$user="root",$password="london",$db_name="users")
    {
        $this->mysqli = new mysqli($host,....);
        .....
    }

    public function display_all($id)
    {
        if($stmt = $this->mysqli->prepare("SELECT name,....);
        ....
    }

}