略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: MySQLi_STMT

2024-11-13

MySQLi_STMT类

(PHP 5, PHP 7, PHP 8)

简介

代表一个预编译 SQL 语句。

类摘要

class mysqli_stmt {
/* 属性 */
int|string $affected_rows;
int $errno;
string $error;
int|string $insert_id;
int|string $num_rows;
string $sqlstate;
/* 方法 */
mysqli_stmt_affected_rows(mysqli_stmt $statement): int|string
public attr_get(int $attribute): int
public attr_set(int $attribute, int $value): bool
public bind_param(string $types, mixed &$var, mixed &...$vars): bool
public bind_result(mixed &$var, mixed &...$vars): bool
public close(): bool
public data_seek(int $offset): void
mysqli_stmt_errno(mysqli_stmt $statement): int
mysqli_stmt_error_list(mysqli_stmt $statement): array
mysqli_stmt_error(mysqli_stmt $statement): string
public execute(?array $params = null): bool
public fetch(): ?bool
mysqli_stmt_field_count(mysqli_stmt $statement): int
public free_result(): void
public get_result(): mysqli_result|false
mysqli_stmt_insert_id(mysqli_stmt $statement): int|string
public more_results(): bool
public next_result(): bool
public num_rows(): int|string
mysqli_stmt_param_count(mysqli_stmt $statement): int
public prepare(string $query): bool
public reset(): bool
public send_long_data(int $param_num, string $data): bool
mysqli_stmt_sqlstate(mysqli_stmt $statement): string
public store_result(): bool
}

目录

add a noteadd a note

User Contributed Notes 2 notes

up
-7
anonunfinder at gmail dot com
8 years ago
<?php
class MySQL
{
    protected
$mysql;
    function
__construct()
    {
               
//Get MySQL config values from config.ini file
       
if($config = parse_ini_file("../config.ini"))
        {
           
// Obtener los valores del fichero de configuración config.ini
           
$ip = $config["ip"];
           
$user = $config["usuario"];
           
$pass = $config["password"];
           
$bd = $config["bd"];
                         
                        
//Connection between a database and php
           
$this->mysql = new mysqli($ip, $user, $pass, $bd);
        }
    }

    function
setResultQuery($query, $param)
    {
       
$array = NULL;
        if(!
$this->mysql->connect_errno)
        {
           
$stmt = $this->setStatement($query, $param);
            try
            {
                if(
$stmt != NULL)
                {
                    if(
$stmt->execute())
                    {
                       
//Obtener resultados
                       
$stmt->store_result();
                       
$variables = array();
                       
$data = array();
                       
$meta = $stmt->result_metadata();
                        while(
$field = $meta->fetch_field())
                        {
                           
$variables[] = &$data[$field->name];
                        }
                       
call_user_func_array(array($stmt, 'bind_result'), $variables);
                       
$i=0;
                        while(
$stmt->fetch())
                        {
                               
$array[$i] = array();
                                foreach(
$data as $k=>$v)
                               
$array[$i][$k] = $v;
                               
$i++;
                        }
                       
$stmt->close();
                    }
                }
            }catch(
Exception $e){
               
$array = FALSE;
            }
        }
        return
$array;
    }

    function
setStatement($query, $param)
    {
        try
        {
           
$stmt = $this->mysql->prepare($query);
           
$ref = new ReflectionClass('mysqli_stmt');
            if(
count($param) != 0)
            {
               
               
$method = $ref->getMethod('bind_param');
               
$method->invokeArgs($stmt, $param);
            }
        }catch(
Exception $e){
            if(
$stmt != null)
            {
               
$stmt->close();
            }
        }
        return
$stmt;
    }

    function
setNoResultQuery($query, $param)
    {
       
$validation = FALSE;
        if(!
$this->mysql->connect_errno)
        {
            try
            {
               
$stmt = $this->setStatement($query, $param);
                if(
$stmt != null)
                {
                    if(
$stmt->execute())
                    {
                       
$stmt->close();
                       
$validacion = TRUE;
                    }
                }
            }catch(
Exception $e){
               
$validation = FALSE;
            }
        }
        return
$validation;
    }

    function
__destruct()
    {
       
$this->mysql->close();
    }
}
?>
up
-8
krapfi at gmail dot com
14 years ago
The prototype of the mysqli_stmt constructor is mysqli_stmt::__construct(mysqli $link, $query);

To extend mysqli_stmt, do

class myStmt extends mysqli_stmt {
  public function __construct($link, $query) {
    parent::__construct($link, $query);
  }
}

class myI extends mysqli {
  public function prepare($query) {
    return new myStmt($this, $query);
  }
}

http://blog.myhat.de/2007/06/26/pdo-and-extending-mysqli/ has further infos including how to extend mysqli_result

官方地址:https://www.php.net/manual/en/class.mysqli-stmt.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3