热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我是否正确插入数据(php+MySQLi)?

如何解决《我是否正确插入数据(php+MySQLi)?》经验,为你挑选了1个好方法。



1> bluefog..:

每当您与内部数据库进行交互时,php您需要记住一个清单:

    正确设置连接,例如,确保在使用pdo时将错误模式设置为异常并告诉它不要模拟预准备语句.使用以下代码设置连接属性:

    $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    

    在获取数据时使用预准备语句和参数化查询.

使用mysqli:

    $stment = $dbConnection->prepare('SELECT * FROM users WHERE name = ?');
    $stment->bind_param('s', $name);

    $stment->execute();

    $result = $stment->get_result();
    while ($row = $result->fetch_assoc()) {
        // do something with $row
    }

使用PDO:

    $stment = $pdo->prepare('SELECT * FROM users WHERE name = :name');

    $stment->execute(array('name' => $name));

    foreach ($stment as $row) {
        // do something with $row
    }

准备好的查询背后的想法非常简单 - 查询和数据分别发送到SQL服务器.当我们发送数据库查询以及数据时,数据可用于执行潜在的恶意查询.有关详细信息,请参阅此答案.

如果要动态添加标识符和语法关键字,请使用白名单.它主要涉及检查用户输入是否是预期的输入,如下所示:

$orders  = array("name","price","qty"); //field names
$key     = array_search($_GET['sort'],$orders)); // see if we have such a name
$orderby = $orders[$key]; //if not, first one will be set automatically. smart enuf :)
$query   = "SELECT * FROM `table` ORDER BY $orderby"; //value is safe

    mysqli_real_escape_string如果由于某种原因未使用预准备语句,请在使用函数插入/搜索数据库之前清理用户的输入.

    确保您很好地处理异常和错误.


推荐阅读
author-avatar
华力
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有