精华内容
下载资源
问答
  • //准备SQL语句:有占位符$sql="INSERTIGNORE`staff`SET`name`=?,`salary`=?...//创建一个SQL语句预处理对象$stmt=$mysqli->prepare($sql);//参数绑定,将用户数组与SQL语句中点位符进行绑定$name=...

    实例

    /**

    * 新增数据

    */

    //连接数据库

    require 'demo1.php';

    //准备SQL语句:带有占位符

    $sql = "INSERT IGNORE `staff` SET `name`= ?, `salary`= ?;";

    //创建一个SQL语句的预处理对象

    $stmt = $mysqli->prepare($sql);

    // 参数绑定,将用户数组与SQL语句中的点位符进行绑定

    $name = '波波';

    $salary = 4300;

    $stmt->bind_param('si',$name, $salary);

    //执行SQL语句

    if ($stmt->execute()) {

    //执行成功

    //检测是否有数据被新增

    if ($stmt->affected_rows > 0) {

    echo '
    成功的插入'.$stmt->affected_rows.' 条记录,新增记录的主键id是: ' . $stmt->insert_id;

    } else {

    echo '
    没有新增记录';

    }

    } else {

    exit($stmt->errno. ':' .$stmt->error);

    }

    //$name = '涛涛';

    //$salary = 9300;

    //$stmt->bind_param('si',$name, $salary);

    //$stmt->execute();

    //

    //

    //$name = '涛涛333333';

    //$salary = 1300;

    //$stmt->bind_param('si',$name, $salary);

    //$stmt->execute();

    //注销stmt对象

    $stmt->close();

    //关闭连接

    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    实例

    /**

    * 新增数据

    */

    //连接数据库

    require 'demo1.php';

    //准备SQL语句:带有占位符

    $sql = "INSERT IGNORE `staff` SET `name`= ?, `salary`= ?;";

    //创建一个SQL语句的预处理对象

    $stmt = $mysqli->prepare($sql);

    //用数组准备要添加的数据

    $data[] = ['name'=>'杨过','salary'=>4000];

    $data[] = ['name'=>'小龙女','salary'=>5000];

    $data[] = ['name'=>'金轮法王','salary'=>8000];

    //参数绑定

    $stmt->bind_param('si',$name,$salary);

    foreach ($data as $staff) {

    //准备一下要插入的数据

    $name = $staff['name'];

    $salary = $staff['salary'];

    //执行SQL语句

    if ($stmt->execute()) {

    //执行成功

    //检测是否有数据被新增

    if ($stmt->affected_rows > 0) {

    echo '
    成功的插入'.$stmt->affected_rows.' 条记录,新增记录的主键id是: ' . $stmt->insert_id;

    } else {

    echo '
    没有新增记录';

    }

    } else {

    exit($stmt->errno. ':' .$stmt->error);

    }

    }

    //注销stmt对象

    $stmt->close();

    //关闭连接

    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    实例

    /**

    * 更新数据

    */

    //连接数据库

    require 'demo1.php';

    //准备SQL语句:带有占位符

    $sql = "UPDATE `staff` SET `salary`= ? WHERE `id`=?;";

    //创建一个SQL语句的预处理对象

    $stmt = $mysqli->prepare($sql);

    //参数绑定

    $salary = 9999;

    $id = 25;

    $stmt->bind_param('ii',$salary, $id);

    //执行SQL语句

    if ($stmt->execute()) {

    //执行成功

    //检测是否有数据被新增

    if ($stmt->affected_rows > 0) {

    echo '
    成功的更新'.$stmt->affected_rows.' 条记录';

    } else {

    echo '
    没有更新记录';

    }

    } else {

    exit($stmt->errno. ':' .$stmt->error);

    }

    //注销stmt对象

    $stmt->close();

    //关闭连接

    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    实例

    /**

    * 删除数据

    */

    //连接数据库

    require 'demo1.php';

    //准备SQL语句:带有占位符

    $sql = "DELETE FROM `staff`  WHERE `id`= ?;";

    //创建一个SQL语句的预处理对象

    $stmt = $mysqli->prepare($sql);

    //参数绑定

    $id = 26;

    $stmt->bind_param('i',$id);

    //执行SQL语句

    if ($stmt->execute()) {

    //执行成功

    //检测是否有数据被新增

    if ($stmt->affected_rows > 0) {

    echo '
    成功的删除'.$stmt->affected_rows.' 条记录';

    } else {

    echo '
    没有删除记录';

    }

    } else {

    exit($stmt->errno. ':' .$stmt->error);

    }

    //注销stmt对象

    $stmt->close();

    //关闭连接

    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    实例

    /**

    * 预处理查询操作

    */

    //连接数据库

    require 'demo1.php';

    //准备SQL语句

    $sql = "SELECT `id`,`name`,`salary`  FROM `staff` WHERE `salary` > ? ;";

    // 创建预处理对象

    $stmt = $mysqli->stmt_init();

    if ($stmt->prepare($sql)) {

    //绑定参数

    $stmt->bind_param('i', $salary);

    //设置参数

    $salary = 5000;

    if ($stmt->execute()) {

    //获取结果集并放到缓存区

    $stmt->store_result();

    //将结果集中的列绑定到变量上

    $stmt->bind_result($id,$name, $salary);

    //结果集是否不为,只有不为空的时候才遍历

    if ($stmt->num_rows > 0) {

    // 循环遍历结果集

    // fetch()每次获取一条记录,并将指针自动下移

    while ($stmt->fetch()) {

    echo '

    id:'.$id.'---姓名:' .$name.'---工资:'.$salary.'

    ';

    }

    } else {

    exit('

    当前表中没有数据

    ');

    }

    // 释放结果集

    $stmt->free_result();

    } else {

    //返回执行阶段的出错信息

    exit($stmt->errno. ': ' . $stmt->error);

    }

    } else {

    //返回sql语句检测阶段的出错信息

    exit($stmt->errno. ': ' . $stmt->error);

    }

    //注销stmt对象

    $stmt->close();

    //关闭连接

    $mysqli->close();

    运行实例 »

    点击 "运行实例" 按钮查看在线实例

    展开全文
  • 说明: 确定查询是否获取表级读取锁, 以防止在包含该查询的事务处理被提交之前更新任何对象读取。这种操作模式提供可重复读取, 并确保在同一事务处理种对相同数据两次查询看到是相同值。 值范围: TRUE | ...
  •  今天,老大找到,平时运行正常系统不能进入,我赶快去检查下,最近系统没有升级呀,是哪里出问题了,原来是有台数据库服务器更新了,新服务器有些参数没有配置,导致系统连接不能该数据库,查明原因,赶快去更新...

    每次服务器更新是件头疼的事儿,一大堆的配置要重新配置,中间还不能出差错。

      今天,老大找到,平时运行正常系统不能进入,我赶快去检查下,最近系统没有升级呀,是哪里出问题了,原来是有台数据库服务器更新了,新的服务器有些参数没有配置,导致系统连接不能该数据库,查明原因,赶快去更新配置。

       配置服务器中间踩了几个坑,在此记录,以务以后查询。

      1、链接数据库和别名创建,以前经常操作,搞定。

      2、数据库用户建立,这个坑有点深,在此记录。

        建立新用户时,有个注意事项:

        如果不是特别情况,“强制实施密码策略”不要勾选,我就是开始没注意,建好用户后,系统还是提示错误,“必须更改密码”。

        开始系统提示,登录用户不存在,所以在数据库中新建用户,在分配用户权限时,出现类似某个数据库中该用户带有架构,所以不能分配权限,

      原因是原来的数据库该用户已存在,并且以该用户的名义建了好多表和存储过程,和新建的用户不能映射关系,如图:

      用户方法,使用Sqlserver系统语句修改映射关系:

      exec sp_change_users_login 'UPDATE_ONE','userA','userA'

       即可建立用户映射。

      3、开启opendatasource查询

      

    转载于:https://www.cnblogs.com/perf/p/6424872.html

    展开全文
  • 11.1.4 由VALUES关键字插入多行数据 11.1.5 使用SELECT语句插入数据 11.1.6 通过视图插入数据 11.1.7 使用子查询插入数据 11.2 数据的更新操作 11.2.1 UPDATE语句的基本语法 11.2.2 使用UPDATE语句更新指定的列值 ...
  • 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 55 2.12 怎样从/向数据文件读/写结构? 56 结构填充 56 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部...
  • Statement接口在创建语句对象时,不带参数,进行查询更新操作时,再传入完整SQL 语句。而PreparedStatement接口创建预处理语句对象时,传入带?SQL语句,进行查询更新操作时,不带参数。 PreparedStatement接口...
    1. Statement接口在创建语句对象时,不带参数,进行查询更新操作时,再传入完整的SQL 语句。而PreparedStatement接口创建预处理语句对象时,传入带?的SQL语句,进行查询更新操作时,不带参数。
    2. PreparedStatement接口代码可读性高,无需拼接SQL语句,语句和代码分离。
    3. PreparedStatement接口执行效率高,它预编译和缓存了结构相同的SQL语句,想String常量池。
    4. PreparedStatement接口安全性更高,避免了产生SQL漏洞注入。

    使用PreparedStatement接口完成数据更新操作

    //步骤1---通过反射实例化数据库驱动类
    //Class.forName("完整的数据库驱动类名");  
    Class.forName("com.mysql.jdbc.Driver");  
    
    //步骤2---调用DriverManager的静态工厂方法获取数据库连接对象
    //Connection conn = DriverManager.getConnection("jdbc:mysql://数据库所在的主机名或IP地址:端口号/数据库名", "连接数据库的用户名", "连接数据库的密码"); 
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/news", "root", "1");
    
    //步骤3---准备带?的SQL语句
    String sql = "xxx";
    
    //步骤4---调用连接对象的工厂方法创建预处理语句对象,传入sql语句
    PreparedStatement pstmt = conn.prepareStatement(sql);     
    
    //步骤5---调用预处理语句对象的setXXX()方法为SQL语句中的每个?传参
    pstmt.setXXX(参数序号, 参数值);
    
    //步骤6---调用预处理语句对象的更新方法,返回本次更新所影响的记录行数,行数>0---表示更新成功 行数=0---找不到要更新的数据 行数<0---更新失败
    int rows = pstmt.executeUpdate();    
    
    //步骤7---关闭预处理语句对象和数据库连接对象
    pstmt.close();
    conn.close();
    

    使用Statement接口完成数据查询操作

    //步骤1---通过反射实例化数据库驱动类
    //Class.forName("完整的数据库驱动类名");  
    Class.forName("com.mysql.jdbc.Driver");  
    
    //步骤2---调用DriverManager的静态工厂方法获取数据库连接对象
    //Connection conn = DriverManager.getConnection("jdbc:mysql://数据库所在的主机名或IP地址:端口号/数据库名", "连接数据库的用户名", "连接数据库的密码"); 
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/news", "root", "1");
    
    //步骤3---调用连接对象的工厂方法创建语句对象
    Statement stmt = conn.createStatement();     
    
    //步骤4---准备完整的SQL语句
    String sql = "select...";
    
    //步骤5---调用语句对象的查询方法,传入SQL语句,返回结果集对象 
    ResultSet rs = stmt.executeQuery(sql);    
    
    //步骤6---使用while循环遍历结果集,调用next()方法将指针移动到下一条记录
    while(rs.next()){
    //步骤7---使用结果集对象的getXXX()方法获取当前记录中不同数据类型的字段值	
    }
    
    //步骤8---关闭结果集对象,语句对象,数据库连接对象
    rs.close();
    stmt.close();
    conn.close();
    
    展开全文
  • 用户请求中参数的值,没有进行任何过滤。 用户请求中参数的值,没有进行任何转码。 通过特殊的请求,Web应用向数据库访问时会附带其他命令: 任意查询命令 创建数据库/表 更新数据库/表内容 更改用户权限 ...
    什么是SQL注入

    SQL注入是一种WEB应用代码中的漏洞。黑客可以构造特殊请求,使Web应用执行带有附加条件的SQL语句。导致SQL注入常见的两种原因如下:

    • 用户请求中带有参数的值,没有进行任何过滤
    • 用户请求中带有参数的值,没有进行任何转码

    通过特殊的请求,Web应用向数据库访问时会附带其他命令:

    • 任意查询命令
    • 创建数据库/表
    • 更新数据库/表内容
    • 更改用户权限
    • 删除数据/表/数据库
    • 执行系统命令
    SQL注入漏洞对于数据安全的影响
    • 可读取/修改数据库中的库和表:
      • 获取用户的账号、密码(可能被加密过),邮箱,联系方式
      • 信用卡信息
      • 修改产品价格
      • 删除数据
    • 可执行系统命令:
      • 修改权限,获取系统管理员权限
      • 修改任意文件
      • 安装后门
    SQL注入类型
    • 简单注入(Simple SQL injection)

      • 永真式:最后加入or 1=1来保证无论如何都能获取数据。
      • 错误语句:让web应用构造错误的SQL语句来抛异常,来判断数据库类型。
      • 结束注释:使用注释符注释剩余语句
      • 联合查询:使用union all,后面可以写要查询的真正语句。
    • 盲注(Blind SQL Injection)

      一般可以根据返回数据获取想要的信息,但一些页面,是获取不到详细信息的。信息只有正确或不正确。

    各个数据库注入方式
    注释符
    数据库 注释符
    MSSQL – (注释符后带空格)
    MYSQL #(不带空格)、-- (注释符后带空格)、/* 注释*/
    ORACLE – (注释符后带空格)

    单行用分号隔开,运行多个多个sql语句(MSSQL).

    判断(IF ,ELSE)
    • MYSQL: IF(condition,true-part,false-part)

      select IF(1=1,"true","false");
      
    • MSSQL:IF condition true-part ELSE false-part

      IF (1=1)  select "true" else select "false";
      
    • ORACLE:BEGIN IF condition THEN true-part ELSE false-part END IF ; END;

      BEGIN IF(1=1) THEN dbms_lock.sleep(3);ELSE dbms_lock(0);END IF;END;
      
    字符串连接
    数据库 连接字符
    mysql ||
    mssql +
    oracle ||

    更多sql注入方式参考:添加链接描述

    注入例子

    在DVWA进行简单注入尝试:

    • 1' and 1=1;#,返回如下截图表示可以被注入。
      在这里插入图片描述
    • 1' or 1=1;#获取所有账号,如何截图表示成功:
      在这里插入图片描述
    • 1' union all select 1,2;#用来判断可以获取的参数个数
      在这里插入图片描述
      当有3时:
      在这里插入图片描述
    • 1' union all select 1,(@@version);#来获取数据库版本
      在这里插入图片描述
    • 1' union all select 1,(database());# 获取数据库名称
      在这里插入图片描述
    • 1' union all select 1,group_concat(column_name) from information_schema.columns where table_name='users';# 获取表所有列名
      在这里插入图片描述
    • 1' union all select user_id,password from users;#获取用户密码
      在这里插入图片描述
    如何防护SQL注入?
    • 为什么会出现sql注入漏洞?
      • 由于数据库可以运行系统命令导致的sql注入,解决办法如下
        • 用最小化权限的账户启动数据库
        • 禁止数据库执行系统命令
      • 由于连接数据库的用户权限过大导致的sql注入,解决办法:
        • 使用IDS,WAF等监控是否有异常操作。
        • 连接数据库的用户权限最小化
      • 由于错误信息返回过多的信息导致的sql注入,解决办法:
        • 统一管理错误信息
        • 禁止向用户提供错误信息
      • 由于服务器未进行过滤导致的sql注入,解决办法:
        • 过滤所有客户端数据
        • 审核数据

    防止sql注入的流程图:
    在这里插入图片描述

    SQL注入测试工具
    工具 特点
    SQLMAP 功能强大但界面不友好
    AWVS 可以查找各种类型的漏洞但速度较慢
    APPScan 可以查找各种类型的漏洞但速度较慢
    WebInspect 可以查找各种类型的漏洞但速度较慢
    展开全文
  • 11.2.3 使用特定查询字符串参数的缓存 11.2.4 自定义缓存控制 11.2.5 使用HttpCachePolicy类进行缓存 11.2.6 缓存后替换和部分页缓存 11.2.7 缓存用户配置 11.2.8 缓存配置 11.2.9 输出缓存扩展 11.3...
  • 医院网站系统后台php

    热门讨论 2009-03-11 11:20:39
    独立语言包,支持GBK,UTF8编码方式,可用于创建各种语言网站 [>]静态HTML生成 可设置生成静态HTML网页,自定HTML缓存更新时间,提升网站访问速度 [>]可视化模版引擎 采用可视化模版引擎,模版修改直观灵活,模版...
  • 创建查询快捷方式.ec 新查询快捷方式.ec 新注册系统热键1.0.ec 新浏览文件夹.ec 新编码转换大全.ec 无心模块 V2.1.ec 无限复活模块(斩月版).e 无限复活模块(斩月版).ec 日期时间增强.ec 日期格式规范.ec 日期...
  • <ul><li>对象继承</li><li>非构造函数继承:继承可以简单使用对象之间深、浅拷贝</li><li> 构造函数继承:大多是基于原型继承,但是阅读性差,也不利于扩展 <ol><li>借调:...
  • 使用参数化URL方法“ get”和“ post”,这是REST API典型特征 Spring数据: 从JpaRepository使用JPQL和现成方法来创建,读取,更新和删除数据 本地查询的实现 Spring安全: 拥有基于数据库用户身份...
  • 存储过程概述

    2018-03-30 14:28:00
    可包含查询、插入、删除、更新等操作一系列SQL语句 存储在sql server 中 通过名称和参数执行 可带参数、也可返回结果 可包含数据操作语句,变量,逻辑控制语句 存储过程优点 执行速度更快 因为存储过程...
  • 实例092 带查询功能combobox控件 149 实例093 利用选择控件实现权限设置 150 实例094 利用richtextbox控件显示图文数据 153 实例095 在listbox控件间交换数据 155 第10章 windows应用程序高级控件 157 实例096 ...
  • CruiseYoung提供的带有详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL Server 2008实战(SQL Server程序员和DBA不可或缺权威参考手册) 基本信息 原书名: SQL Server 2008 ...
  • WEB安全-注入漏洞

    2020-10-11 02:59:01
    用户请求中参数的值,没有进行任何过滤 用户请求中参数的值,没有进行任何转码 通过特殊的请求,Web应用向数据库访问时会附带其它命令: 任意查询命令 创建数据库/表 更新数据库/表内容 更改用户权限 删除...
  • 为了获得更好的性能,可以通过调用布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:  conn.setAutoCommit(false);  值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用...
  • 有索引时候:创建索引本质就是创造额外文件,查询时先去额外文件找,定好位置,再去原始表直接查询,提高查询速度,但是增删改速度依然慢,创建索引后必须命中索引才有效 索引分类 1、普通索引:加速...
  • 目录 简介和安装 ...Nodejs 调用out参数的存储过程,并得到out参数返回值 结束数据库连接两种方法和区别 连接池Pooling connections 创建 其它连接池配置选项 释放 使用示例 断线重连...
  • 目录 简介和安装 ...Nodejs 调用out参数的存储过程,并得到out参数返回值 结束数据库连接两种方法和区别 连接池Pooling connections 创建 其它连接池配置选项 释放 使用示例 断线重连...
  • W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力国际中立性技术标准机构。主要工作是发展 Web 规范,这些规范描述了 Web 通信协议(比如 HTML 和 XHTML)和其他构建模块。 NativeApp 使用...
  • Access入门教程

    2018-10-16 16:23:55
    更新查询 72 2. 追加查询 74 3. 删除查询 75 4. 生成表查询 75 五、SQL专用查询 77 ⑴ 使用SQL进行投影 78 ⑵ 使用SQL进行选择 79 SELECT 学号,姓名,主修,年龄 FROM ST WHERE 主修=‘MATH’ 79 SELECT 姓名,主修,...
  • 游标

    2021-03-03 19:02:07
    游标游标简介隐式游标利用隐式游标解决NO_DATA_FOUND异常显式游标不带参数的显示游标带参数的显示游标使用显式游标更新行游标的FOR循环REF 游标和游标变量使用ref游标变量执行动态 SQL总结 游标 游标简介 逐行处理...
  • PB进阶代码(很全

    热门讨论 2009-10-17 11:56:58
    3.9 编译后程序带参数运行 -- CommandParm 3.10 取当月最后一天函数 -- GetLastDay 3.11 限制同一程序多次运行 -- OnlyOnce 本章所使用资源文件 -- pic 第4章 数据库与SQL 4.2 PowerBuilder + ASA8C/S...
  • 11.19 rpm:RPM包管理器

    2019-05-06 14:05:00
    rpm命令全称是Red Hat Package Manager(Red Hat包管理器),几乎所有Linux发行版本都使用了这种形式命令管理、安装、更新和卸载软件。...参数选项 解释说明(*为重点) -q 查询软件包 -p ...
  • 11.2.2 设置查询参数 459 11.2.3 取得查询结果 460 11.3 JPQL语法 461 11.3.1 使用from子句 462 11.3.2 使用select子句 463 11.3.3 查询部分属性 463 11.3.4 查询中使用构造器 464 11.3.5 使用distinct排除相同...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 250
精华内容 100
关键字:

创建带参数的更新查询