mysqli prepared expect parameter?

2019-03-06 07:39发布

问题:

I try to write own database class.I have some problem.

When I run it , it gives these errors.

Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in /Users/emrecetin/www/ayrox/m/db.php on line 75

Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /Users/emrecetin/www/ayrox/m/db.php on line 76

Warning: mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, boolean given in /Users/emrecetin/www/ayrox/m/db.php on line 77

Warning: mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, boolean given in /Users/emrecetin/www/ayrox/m/db.php on line 78

on these line;

mysqli_stmt_bind_param($sor, 's', $hede);
mysqli_stmt_execute($sor);
mysqli_stmt_bind_result($sor, $bas);
mysqli_stmt_fetch($sor);

I will give short version of databse class.It is not exactly, I write just what I use.

class db{

    public $durum;
    protected $server = 'localhost'; 
    protected $suser = 'root'; 
    protected $spass = 'root';
    public $db = 'members'; 

    public $durum; // mysqli durumu
    public $sor; // mysql_query ile birleştirilen hali
    public $kacsonuc;

    function db(){
        $this->durum = mysqli_connect($this->server,$this->suser,$this->spass);
        $this->dbchoose($this->db)
    }

    function dbchoose($db){
        if(!mysqli_select_db($this->durum,$db)){ 
            $this->errors[] = 'Database cant choose';
            $this->hata=True;
        }

    function see(){
        $id = 'select * from uyeler where id=?';
        $sor = mysqli_prepare($this->durum, $id);
        $hede = '3';
        mysqli_stmt_bind_param($sor, 's', $hede);
        mysqli_stmt_execute($sor);
        mysqli_stmt_bind_result($sor, $bas);
        mysqli_stmt_fetch($sor);
    }

}

what is the problem ? I cant understand.Thank you (and sorry for my grammer).

回答1:

Anytime you see "boolean given" in a mysql error message, it means that some previous mysql function call has failed, returning a boolean FALSE value. You're trying to use that boolean false in the current mysql call, and get this message.

You have no error handling in your code, which means those FALSE values will propagate throughout your code, spitting out those errors everywhere it goes.

At minimum, your code should look something like this, everywhere you do a mysql/mysqli call:

function see(){
    $id = 'select * from uyeler where id=?';
    $sor = mysqli_prepare($this->durum, $id);
    if ($sor === FALSE) {
        die(mysqli_error($this->durm));
    }
    etc...
}

How you handle the error is up to you - in this case it'll simply abort the script and tell you why.



标签: php mysqli