预处理语句占位符的使用

原创 2015年11月19日 17:59:01

预处理语句占位符的使用,方法绑定参数,sql注入等..

try{
    $user = "root"; // 这里是你的数据库用户名
    $pwd = "yangli"; // 这是是你的数据库密码
    $pdo = new PDO("mysql:dbname=test;host=127.0.0.1", $user, $pwd);
}catch(PDOException$e){
    echo $e->getMessage();
}
$username = $_POST['username'];
$pwd = md5($_POST['password']);
$sql = "SELECT * FROM  user WHERE `user`=:username AND pwd =:pwd";
$stmt = $pdo->prepare($sql); // 准备一条预处理语句

// 占位符的使用方法一, 这样还可以便面sql注入
$res = $stmt->execute(array(":username"=> $username,":pwd" => $pwd)); 
if(!$res){
    echo exit("错误信息: ".var_dump($stmt->errorInfo()));
}
echo $stmt->rowCount(); // 有记录返回1, 没有返回0

// 占位符使用方法二
$sql = "SELECT * FROM user WHERE `user`=? AND pwd=?"; // 1
//$sql = "SELECT * FROM user WHERE `user`=:username AND pwd=:pwd"; // 2
$stmt = $pdo->prepare($sql);
$stmt->execute(array($username, $pwd));
$stmt->execute(array(':username'=> $username, ':pwd' => $pwd));
echo $stmt->rowCount(); // 有记录返回1,没有返回0

方法绑定参数

$sql = "SELECT * FROM user  WHERE `user`= :username AND `pwd`= :pwd"; // 1
$sql = "SELECT * FROM user WHERE `user`=? AND `pwd`=?";
$stmt = $pdo->prepare($sql);



//对于使用命名占位符的预处理语句,应是类似 :name  形式的参数名。对于使用问号占位符的预处理语句,应是以1开始索引的参数位置, 常用的方式一般会使用 :name形式的参数名,这样看起来比较直观。 

$stmt->bindParam(':username', $username); 
$stmt->bindParam(':pwd', $pwd);

// 使用?问好占位符,索引从一开始, 第二个参数必须是一个变量,不能是直接的值
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $pwd);

$stmt->execute();
echo $stmt->rowCount(); //有记录返回1,没有返回0



// 同时可以插入多条语句
$username = "demo6";
$pwd = md5('demo1');
$email = "test1@test.com";
$sql = "INSERT INTO user (`user`, `pwd`, `email`) VALUES (:username, :pwd, :email)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':pwd', $pwd);
$stmt->bindParam(':email', $email);
if(!$stmt->execute()){
    var_dump($stmt->errorInfo());exit;
}

$username = "demo7";
$pwd = md5('demo1');
$email = "test2@test.com";
$stmt->bindParam(':username', $username);
$stmt->bindParam(':pwd', $pwd);
$stmt->bindParam(':email', $email);
if(!$stmt->execute()){
    var_dump($stmt->errorInfo());exit;
}
echo $stmt->rowCount();

//删除语句
$id = 6;
$user = 'demo6';
//$sql  = "DELETE FROM user WHERE id = :id AND user=:username";
$sql  = "DELETE FROM user WHERE id = ? AND user=?";
$stmt = $pdo->prepare($sql);
//$stmt->bindParam(':id', $id);
//$stmt->bindParam(':username', $user);
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $user);

$stmt->execute();
echo $stmt->rowCount();

//更新语句
$id = 5;
$user = 'demo7';
$sql = "UPDATE user SET user = :user WHERE id=:id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user', $user);
$stmt->bindParam(':id', $id);
$stmt->execute();
echo $stmt->rowCount();

mysql 的 占位符使用 以及一次执行多行sql语句

占位符的使用:drop PROCEDURE if EXISTS test12; -- 使用drop 来删除存储过程或者表create PROCEDURE test12() -- 创建存储过程 命名为t...
  • z1729734271
  • z1729734271
  • 2017年01月27日 14:43
  • 5105

spring属性占位符

在bean定义时设置bean属性的值时,除了设置固定的值,还可以通过EL表达式和占位符来设置,容器在解析bean定义时会对EL表达式和占位符进行解析求值。本篇来学习一下通过占位符定义属性的用法。 占位...
  • pentiumchen
  • pentiumchen
  • 2015年03月15日 21:54
  • 4117

SQl语句中使用占位符的优点

1.增加SQL代码可读性 2.占位符可以预先编译,提高执行效率 3.防止SQL注入 4用占位符的目的是绑定变量,这样可以减少数据SQL的硬解析,所以执行效率会提高不少  绑定变量是Or...
  • longjef
  • longjef
  • 2016年10月21日 19:36
  • 666

关于SQL语句的占位符使用及动态SQL

一、SQL占位符的使用 1、对于存储过程中占位符的使用: DECLARE BEGIN   SQL_STMT := 'select * from student where id=:1 an...
  • zy18755122285
  • zy18755122285
  • 2016年07月30日 19:01
  • 14962

Dbutils Sqlserver Update 占位符问题

使用DButils,修改sqlserver2000数据库,代码如下: public static void updatetest() { Connection conn = getCon...
  • widenstage
  • widenstage
  • 2017年05月13日 23:34
  • 695

占位符,SQL注入?

这两天在上课时被同学拿了一段代码问我,这段代码有什么问题,我看了一会说:Connection和PreparedStatement都没关。他说不止这方面的问题,还有sql注入的问题,我就坚决的说使用了占...
  • yan465942872
  • yan465942872
  • 2011年09月06日 16:57
  • 16785

MYSQL语句大全(SQL 高级教程)【下】

SQL 高级教程 Drop                撤销索引、表以及数据库                        DROP INDEX 命令删除表格中的索引        ...
  • JF_2012
  • JF_2012
  • 2015年12月31日 17:57
  • 2319

关于使用占位符来解决SQL注入

总结: SQL已经预编译好了,然后替换中间的占位符,这个占位符在编译后就已经确定了它只是一个参数属性。因此,用注入的代码去替换占位符,这个SQL也不会再进行编译了,所以也达不到注入的目的。 S...
  • Inconsolabl
  • Inconsolabl
  • 2015年08月29日 21:13
  • 5099

Mysql模糊查询中对于“?”占位符的使用

sql语句:var selectOneSql = "select * from userMag where uname like ? ";在设置参数的时候,进行字符串的拼接。var searchInf...
  • MPFLY
  • MPFLY
  • 2017年09月27日 16:47
  • 639

sql中参数 问号占位符 和 命名参数

sql中参数 问号占位符 和 命名参数Q: 在写的过程有时候会疑惑,尤其是hibernate的时候有疑惑,什么时候能用named parameter什么时候不能用?A: 从原本来说,jdbc不支持命...
  • kang389110772
  • kang389110772
  • 2016年12月19日 11:19
  • 1747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:预处理语句占位符的使用
举报原因:
原因补充:

(最多只允许输入30个字)