⑴ PHP 在5.1.和5.2.之间 PDO数据库操作中的不同
PHP 在5.1.和5.2.之间 PDO数据库操作中的不同
1.使用占位符,避免逐字输入数据到sql中。自动处理引号和反斜线等字符的转义——增加安全性。
2.预先“准备”一条语句,然后在每次执行时绑定不同值达到重用的目的。——常用于以后被多次执行的语句。
3.可读性强。
代码数据库连接代码都一样.
$protol = 'mysql:host=localhost;dbname=test';$username = 'monty';$passwd = '0818';$dbh = new PDO($protol, $username, $passwd);
⑵ 关于php使用sqlsrc_query()函数执行sql代码的问题
你试试下面的代码:
$userid = $_POST['ID']; //用户ID
$userpw = $_POST['password']; //用户输入的密码
$sql = "select * from AllID where ID=$userid and password=$userpw";
$query = sqlsrv_query($admin_conn, $sql); //执行SQL语句
if( $query === false){ //查询不到结果
print_r(sqlsrv_errors());
echo "<script>alert('登录失败');</script>";
echo "<script>window.history.go(-1);</script>"; //返回上一级页面
}
else{ //执行语句无误
echo "登录成功,3秒后自动跳转到首页...";
}
⑶ WMSYS.WM_CONCAT的问题
最直接的方法是再加一层select然后where过滤。
1、占位符的问题要看你是java、php、还是存储过程?
2、前台传来的是一串PRMTYPE(多个)、还是单个PRMTYPE值?
单个的话应该是and instr(PRMTYPE,:P_PRMTYPE)>0这样判断。占位符:P_PRMTYPE就是在sql语言环境下的方式。
⑷ php如何防止sql注入
PHP防止sql注入是一个比较低级的问题了,这个问题其实在我大一上学期做第一个个人博客的时候就已经关注过了,不过简单的说一下关于PHP防注入的方式吧。
对于现在的防注入技术其实已经成熟了,对于一个站点该关心的不是防注入了,而是大规模高并发如何处理的问题,或者关于各种其他漏洞,比如现在世界上仍然有百分之80使用redis的站点存在redis漏洞,通过redis漏洞可以直接拿到机器的访问权限,一般来说都是直接给你种一个挖矿机器人来。
⑸ 为什么不用字符串拼接可以防止sql注入
sql
=
"select
*
from"
&
mc
'怎么拼对吗?
这个是正确的。
set
rs
=
conn.execute("select
*
from
&
mc")
‘怎么拼接对吗?
这个是不对的。这个里面的sql语句建议赋值给一个变量,然后直接调用变量,当然也可以这么写,不过要注意格式:set
rs
=
conn.execute("select
*
from
"&
mc)应该是这个样子的,不知道有没有记错,你试试看。
⑹ php操作MySQL中单引号与怎么处理
花括号,花括号中既可以输出简单变量,也可以输出复杂变量,如数组、对象等;
1.$a = 'abcd';2.$b = array('aaa' => 'abcd', 'bbb' => array(12,34));3.echo "{$a}"; // 输出 abcd4.echo "{$b['aaa']}"; // 输出 abcd5.echo "{$b['bbb'][1]}"; // 输出 34
所以写的时候想偷懒就用花括号,不会出错;
但是在性能上,单引号的性能最好,因为单引号中的内容会直接被当成字符串,没其他的解析;而解析双引号的时候,会先判断双引号内有没有变量,有变量就把变量用变量值代替,最后再输出双引号内整个的内容;花括号就更不用说了,可以输出复杂的变量内容。
⑺ php中SQL语句能不能用占位符代替表的名字
这样做不行,占位符的用法一般是在字符串处理的函数中的,而不是在prepare这个函数中。
建议你先做一个字符串处理,将占位符用类似“[strKey]”这样的字符标签占位,然后再去替换这个标签(用str_replace函数)。
@str='createtableifnotexists[TableName](idint(11)unsignednotnullauto_incrementprimarykey,uservarchar(255)notnull,contenttextnotnull,ctimedatetime)';
@str=str_replace("[TableName]","myTableName",@str);
这样是比较好理解的。
⑻ php mysqli 预处理 怎么绑定参数
<?php
/* 连接数据库类 MysqlConnect */
class MysqlConnect{
private $dbhost=null;
private $dbuser=null;
private $dbpwd=null;
private $dbname=null;
private $dbport=null;
private $ifpdo=null;
private $dburi=null;
private $handler=null;
function __construct($dbhost,$dbuser,$dbpwd,$dbname,$dbport,$ifpdo,$dburi){
$this->dbhost=$dbhost;
$this->dbuser=$dbuser;
$this->dbpwd=$dbpwd;
$this->dbname=$dbname;
$this->dbport=$dbport;
$this->ifpdo=$ifpdo;
$this->dburi=$dburi;//PDO的URI参数,可以查手册
if($this->ifpdo==1){//表示调用PDO来操作数据库
$this->handler=$this->CreatePdo();
}elseif($this->ifpdo==0){//这里可以写MYSQLI的方法
$this->handler=null;
}
}
/* ----------------这里是入口--------------------- */
//@param sql:外部调用时传递的完整SQL语句
//@param bindArray:绑定的参数数组,与sql语句有关,如果没有PDO占位符此处为空
//@param action:传递操作参数,"select"/"update"/"delete"/"insert"
public function exeSql($sql,$bindArray=array(),$action=""){
$stmt=$this->handler->prepare($sql);
$stmt->execute($bindArray);
switch($action){
case "select":
return $stmt->fetch(PDO::FETCH_ASSOC);
break;
case "selectAll":
return $stmt->fetchAll(PDO::FETCH_ASSOC);
break;
case "update":
case "delete":
return $stmt->rowCount();
break;
case "insert":
return $this->handler->lastInsertId();
break;
case "count":
return $stmt->rowCount();
default:
return "";
}
}
public function query($sql){
return $this->handler->query($sql);
}
private function CreatePdo(){
try{
$handler=new PDO($this->dburi,$this->dbuser,$this->dbpwd);
$handler->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
return $handler;
}catch(PDOException $e){
$e->getMessage();
$this->handler=null;
}
}
private function __get($args){
if($args=='handler'){
return $this->handler;
}
}
}
require(NEO_A_P.'\data\sqlconfig.php');//这里是sql的连接文件,下面创建对象的时候需要的变量就是这个文件里要有的
$handler=new MysqlConnect($dbhost,$dbuser,$dbpwd,$dbname,$dbport,$ifpdo,$dburi);
?>