mySQLi prepared statement unable to get_result()

后端 未结 2 812
清歌不尽
清歌不尽 2020-11-28 16:13

I am totally confused by mySQLi. Although I have been using procedural mysql calls for years, I want to get used to making prepared statements for the db security/mySQL inj

相关标签:
2条回答
  • 2020-11-28 16:19

    Through some checking, even though mysqli is installed on my host, apparently the mysqlnd driver is not present. Therefore, get_result() can not be used(php manual defines get_result as mysqlnd dependent), and instead extra coding would need to be done to handle my result the way I would like.

    Therefore, I decided to try and learn how PDO works, and within minutes, voila!!!

    Replaced the above code with this:

    function checkUsernameEmailAvailability($username, $email) {
    
    echo 'pdo about to be created';
    
    $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST;
    $user = C_USER;
    $password = C_PASS;
    
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    
    $params = array(':username' => $username, ':email' => $email);
    
    try{
    $sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
    } catch(PDOException $e) {
        echo 'Prepare failed: ' . $e->getMessage();
    }
    
    try{
    $sth->execute($params);
    } catch(PDOException $e) {
        echo 'Execute failed: ' . $e->getMessage();
    }
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($result);
    }
    

    As much error checking as I could think of, and no problems at all first crack at it!

    Final Code

    function checkUsernameEmailAvailability($username, $email) {
        $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST;
        $user = C_USER;
        $password = C_PASS;
        new PDO($dsn, $user, $password);
    
        $params = array(':username' => $username, ':email' => $email);
    
        $sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
        $sth->execute($params);
        $result = $sth->fetch(PDO::FETCH_ASSOC);
    
        print_r($result);
    }
    
    0 讨论(0)
  • 2020-11-28 16:33

    mysqli_stmt :: get_result is Available only with mysqlnd package. remove php5-mysql package and install php5-mysqlnd instead

    0 讨论(0)
提交回复
热议问题