`

PHP mysqli_stmt 的 bindparam问题

 
阅读更多

在使用 mysqli_stmt 相关预处理SQL的方法时,调用bind_param会报一个参数不足的错误。可以采用如下方式解决,假设你有一个这样的封装:

function execute_stmt($sql_str , $params=array()){
    $stmt = mysqli_stmt_prepare($link_id, $sql_str);
    if ( $stmt ){
        foreach($params as $k=>$v){
            $array[] = &$params[$k]; //注意此处的引用
        }
        call_user_func_array(array($stmt, 'bind_param'), $array); // 魔术方法直接call
        $stmt->execute();
        ...
        // 若干方法
    }
}

 由于PHP手册上写到,这个方法是传递可变长度的参数表,因此直接传递数组的话会使其误解为单一参数。

另外,传递的$params 至少像这样写才成:

$params = array(
    'ids',            // 第一个参数为参数表类型串, 其中 i:整型 d:双精度 s:表示字符串 b:BLOG
    1000,
    200.00,
    'string value'
);

 如此这般,就可以使用PHP的预处理SQL了。

分享到:
评论

相关推荐

    MYSQL_application_in_PHP5.rar_MYSQL_in_php5

    - `mysqli_stmt_bind_param()`绑定参数到预处理语句。 - `PDOStatement`的`bindParam()`或`bindValue()`方法绑定参数值。 7. **执行语句**: - `mysqli_stmt_execute()`执行预处理的SQL语句。 - `PDOStatement`...

    IP得到地级市城市名(PHP版).rar

    4. 绑定参数(如`mysqli_stmt_bind_param()`或`PDOStatement::bindParam()`),将IP地址值传入查询。 5. 执行查询(如`mysqli_stmt_execute()`或`PDOStatement::execute()`)。 6. 获取结果(如`mysqli_stmt_fetch()...

    完整的php操作MySQL数据库类

    $stmt->bindParam(':id', $id); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); ``` 6. **事务处理**:对于需要原子性的多条SQL操作,可以使用`mysqli_begin_transaction`、`mysqli_commit`和`...

    PHP实例开发源码-Amysql PHP (AMP).zip

    6. 参数绑定:预处理语句中的参数使用`mysqli_stmt_bind_param()`或`PDOStatement::bindParam()`进行绑定,将变量值安全地插入到SQL语句中。 7. 事务处理:在需要确保一系列数据库操作完整性的场景下,使用`mysqli_...

    php.rar_PHP 数据库

    $stmt->bindParam(':newEmail', $newEmail); $stmt->bindParam(':id', $id); $stmt->execute(); ``` 6. **删除数据**:DELETE语句配合`mysqli_query()`或PDO的`exec()`/`query()`进行数据删除: ```php $sql...

    php上传csv文件到mysql

    mysqli_stmt_bind_param($stmt, "ss", $row[0], $row[1]); mysqli_stmt_execute($stmt); } // PDO 示例 foreach ($data as $row) { $stmt = $pdo->prepare("INSERT INTO my_table (column1, column2) VALUES (:...

    php数据库操作大全源代码_bpqagq_php_

    3. 绑定参数:使用`PDO::bindParam()`或`mysqli_stmt_bind_param()`,确保数据安全。 4. 执行SQL:调用`PDO::exec()`或`mysqli_query()`。 5. 检查结果,处理错误:通过返回值或异常处理来确认操作是否成功。 接...

    php中mysql数据库操作类

    `PDO`提供了`prepare()`和`bindParam()`方法,而`mysqli`扩展则使用`mysqli_prepare()`和`mysqli_stmt_bind_param()`。 6. **事务处理**:在需要执行一组连续的、必须全部成功或全部失败的操作时,事务是非常重要的...

    php mysql连接

    尽管`mysql_connect()`在旧版本的PHP中被广泛使用,但由于它不支持最新的MySQL特性且存在安全问题,因此已被弃用。我们主要关注`mysqli_connect()`和PDO方法。 1. **mysqli_connect()**:这是PHP推荐的MySQL接口,...

    phpMysql.rar

    $stmt->bindParam(':email', $email); $name = 'John'; $email = 'john@example.com'; $stmt->execute(); ``` 7. **错误处理和事务** 为了确保数据一致性,可以使用PHP的事务处理功能。例如: ```php $pdo->...

    salvar-imagem-no-banco-de-dados-com-php-mysql:使用 PHPMySQL 将图像保存到数据库

    mysqli_stmt_bind_param($stmt, "sb", $name, $imageData); mysqli_stmt_execute($stmt); // 使用PDO $stmt->bindParam(':name', $name); $stmt->bindParam(':data', $imageData, PDO::PARAM_LOB); $stmt->...

    《关于php数据库链接》

    $stmt->bindParam(':id', $id); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); echo "Name: " . $user['firstname'] . " " . $user['lastname']; ``` 在这个例子中,`bindParam()`确保了即使用户...

    php数据库接口 (2).pdf

    $stmt->bindParam(':password', MD5('123')); $stmt->bindParam(':email', 'xiaoming'); $stmt->bindParam(':age', 34); $stmt->execute(); if ($stmt->rowCount() > 0) { // ... } } catch (PDOException $...

    php和asp防止sql注入类

    $stmt->bindParam(':username', $username); $username = $_POST['username']; $stmt->execute(); ``` 另外,使用`mysqli`扩展的预处理语句也是类似: ```php $stmt = mysqli_prepare($conn, 'SELECT * FROM users...

    PHP5 MySQL 编程入门(PDF)-数据库类-My Sql英文版

    $stmt->bindParam(':username', $username); $username = 'john'; $stmt->execute(); foreach ($stmt as $row) { echo $row['email']; } ?> ``` 在MySQL中,表的设计和管理也是重要的概念。表由列和行组成,每个...

    PHP SQL更新语句.rar

    $stmt->bindParam(':username', $username); $new_age = 30; $username = 'John Doe'; $stmt->execute(); ``` 通过理解并熟练掌握这些PHP和SQL更新语句的概念,开发者可以有效地管理数据库,确保数据的准确性和一致...

    php连接数据库,重要是PHP开发用的

    $stmt->bindParam(':username', $username); $username = 'john'; $stmt->execute(); $results = $stmt->fetchAll(); ``` 参数绑定确保了即使用户输入的数据也不会破坏SQL语句。 5. **关闭数据库连接** 完成...

    PHP简单预防sql注入的方法

    $stmt->bindParam(':id', $id); $stmt->execute(); ``` 2. 使用`mysqli_real_escape_string()`函数: 这个函数可以转义SQL特殊字符,防止它们被解释为SQL代码。但请注意,它需要数据库连接,并且对于整型数据...

    PHP MySQL编程

    $stmt->bindParam(':email', $email); $stmt->bindParam(':id', $id); $email = 'newemail@example.com'; $id = 1; $stmt->execute(); ``` 4. **删除数据** ```php $stmt = $pdo->prepare("DELETE FROM ...

    php+mysql添加修改语句.docx

    同时,为了防止SQL注入,应当使用预处理语句(如`mysqli_prepare`和`PDO::prepare`)和绑定参数(如`mysqli_stmt::bind_param`和`PDOStatement::bindParam`)。 总的来说,这个文档提供了PHP处理MySQL数据插入和...

Global site tag (gtag.js) - Google Analytics