Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 4 of 4
  1. #1
    New Coder
    Join Date
    Nov 2009
    Posts
    29
    Thanks
    5
    Thanked 0 Times in 0 Posts

    Why fetch_assoc() or fetch_row() giving error always

    Hi Every Body

    I am facing problem in retreving the data from my mysql table I want to use prepared statement with mysqli for security reason. Here is my code Please give a guidance -
    PHP Code:
    <?php
    $host
    ="localhost"// Host name 
    $username="**********"// Mysql username 
    $password="**********"// Mysql password 
    $db_name="**********"// Database name 
    $tbl_name1="**********"// tem Table name 
    $tbl_name2="**********"// registered user table

    $mysqli = new mysqli($localhost$username$password$db_name);
    if (
    $mysqli->connect_errno)
    {
        echo 
    "Connection Failed: " mysqli_connect_errno();
        exit();
    }
    $count=null;
    $passkey=$_GET['passkey'];

    echo 
    $passkey;  // exact passkey printed
    if($stmt $mysqli -> prepare("SELECT * FROM $tbl_name1 WHERE confirm_code=?"))
    {
        
    $stmt -> bind_param("s"$passkey);
        
    $stmt -> execute();
        
    $stmt->store_result();
        
    $count=$stmt->num_rows;
        echo 
    "\n".$count;   // getting the value 1 which is correct
        
    if($count==1)
        {
        while(
    $rows $stmt->fetch_assoc())
        {
             
    $v_fname=$rows['temp_first_name'];
             
    $v_lname=$rows['temp_last_name'];
             
    $v_sex=$rows['temp_sex'];
             
    $v_phone=$rows['temp_phone'];
             
    $v_city=$rows['temp_state'];
             
    $v_state=$rows['temp_city'];
             
    $v_pin=$rows['temp_pin'];
             
    $v_schoolname=$rows['temp_school_name'];
             
    $v_class=$rows['temp_class'];
             
    $v_subject=$rows['temp_computer_subject'];
             
    $v_board=$rows['temp_board'];
             
    $v_session=$rows['temp_session'];
             
    $v_email=$rows['temp_email'];
             
    $password=$rows['temp_password'];
             
    $v_salt=$rows['temp_salt'];

        if (!(
    $insert_stmt $mysqli->prepare("INSERT INTO $tbl_name2    (first_name,last_name,sex,phone,state,city,pin,school_name,class,computer_subject,board,     session,email,password,salt) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")))
        {
            echo 
    "Prepare failed: (" $mysqli->errno ") " $mysqli->error;
        }
        if(!
    $insert_stmt->bind_param('sssiiisssssssss',$v_fname,$v_lname,$v_sex,$v_phone,$v_city,$v_state,$v_pin,    $v_schoolname,$v_class,$v_subject,$v_board,$v_session,$v_email$password,$v_salt))
        {
            echo 
    "Binding parameters failed: (" $stmt->errno ") " $stmt->error;
        }
        if(!
    $insert_stmt->execute())
        {
            echo 
    "Execute failed: (" $mysqli->errno ") " $mysqli->error;
        }
        else
        {
            
    //echo "Data saved properly";
            
    $flag=1;
            if(
    $flag==1)
            {
                echo 
    "<body bgcolor='#FFFF99'>";
                echo 
    "<p align='center'><font color='#008000' size='6' face='Verdana'>";
                echo 
    "Congratulation...!! </font>";
                echo 
    "</br>";
                echo 
    "<font color='e80005' size='5'>Your account has been activated</font>";

                if (
    $stmt $mysqli->prepare("DELETE FROM $tbl_name1 WHERE confirm_code = ? LIMIT 1")) 
                        { 
                                
    $stmt->bind_param("s",$passkey);      
                                
    $stmt->execute();      
                        }
            }
        }
          }
       }
    }
    else
    {
        echo 
    "Select Failed: (" $mysqli->errno ") " $mysqli->error;
        echo 
    "<body bgcolor='#FFFF99'>";
        echo 
    "<p align='center'><font color='#e80005' size='6' face='Verdana'>";
        echo 
    "SORRY...! </font>";
        echo 
    "</br>";
        echo 
    "<font color='#e80005' size='5'>Your Confirmation code is not correct</font>";
    }


      
    $stmt->close();
    Soory I forgot to add the error -
    Here is the error I'm getting -
    Fatal error: Call to undefined method mysqli_stmt::fetch_assoc() in /home/cbsecpsn/public_html/confirmation.php on line 38
    Last edited by vishalonne; 10-07-2012 at 06:26 PM.

  • #2
    God Emperor Fou-Lu's Avatar
    Join Date
    Sep 2002
    Location
    Saskatoon, Saskatchewan
    Posts
    16,994
    Thanks
    4
    Thanked 2,662 Times in 2,631 Posts
    Just as the error says, there is no method fetch_assoc on a statement object.
    You must bind the result and fetch in a loop. See the api here for an example: http://ca1.php.net/manual/en/mysqli-stmt.fetch.php

  • #3
    Senior Coder Dormilich's Avatar
    Join Date
    Jan 2010
    Location
    Behind the Wall
    Posts
    3,394
    Thanks
    13
    Thanked 353 Times in 349 Posts
    another option is to convert the mysqli statement into a mysqli result via mysqli_stmt::get_result().
    The computer is always right. The computer is always right. The computer is always right. Take it from someone who has programmed for over ten years: not once has the computational mechanism of the machine malfunctioned.
    André Behrens, NY Times Software Developer

  • #4
    God Emperor Fou-Lu's Avatar
    Join Date
    Sep 2002
    Location
    Saskatoon, Saskatchewan
    Posts
    16,994
    Thanks
    4
    Thanked 2,662 Times in 2,631 Posts
    Quote Originally Posted by Dormilich View Post
    another option is to convert the mysqli statement into a mysqli result via mysqli_stmt::get_result().
    Yes, that is true, and then you can call fetch_assoc on the mysqli_result object.
    Personally I find binding the results to be far faster though. It does have one huge advantage, as of 5.4 it implements Traversable so you can use a foreach on it. For this reason, I may suggest that mysqli_result best be reserved for single field names as it can be treated much closer to the old mysql_result function.
    Although, for this particular code here, the mysqli_result may be easier to work with as then you can extract the $row from it. That would make the code rewrite only a couple of lines versus the change to the binding, so the OP really can go either way.


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •