十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
?php
创新互联公司长期为超过千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为郧西企业提供专业的成都做网站、网站建设,郧西网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
class db_con{
public $dbhost = "localhost"; //主机
public $dbuser = "root"; //用户
public $dbpassword = "123456"; //密码
public $dbname = "data"; //数据库名称
function __construct(){
//连接数据库
$this-mysqli = new mysqli($this-dbhost, $this-dbuser, $this-dbpassword, $this-dbname);
if($this-mysqli-connect_error){
$this-halt("您所选的数据库".$dbname."不存在");
}
}
function query($query){
mysqli_query($this-mysqli,"set names 'utf8'");
$res = $this-mysqli-query($query);
if(!$res)$this-halt("font color=redError:/font font style='font-size:12px;color:#0000ff'".$query);
return $res;
}
function num_rows($query){$res = mysqli_num_rows($query);return $res;}
function fetch_array($query) {return mysqli_fetch_array($query);}
function insert_id() {return mysqli_insert_id($this-mysqli);}
function data_seek($rt,$pagesizeinfo) {return mysqli_data_seek($rt,$pagesizeinfo);}
function halt($msg){echo $msg;exit;}
}
$db = new db_con;
?
mysql的项目,需要设计一个快速上载的机制。最后的解决办法是利用了mysql的预处理语句的特性实现的。mysql的预处理语句支持多行数据的预处理,即 insert into (columnName,columnName,...) values(?,?,...)(?,?,..)...。这样你在绑定输入参数的时候可以在程序里将整张表的数据都绑定好然后调用一次执行就能将整张表的数据插入,比用mysql_query一行一行插入省的几倍的时间。不过你一次发到mysql服务器端的数据多的情况下,要设置my.ini文件下的一个配置项,把服务器允许一次发送的数据包的大小调大就行。
某需求某一条 SQL 语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。
所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。
预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。
注意:虽然可能是通过预处理 SQL 的方式一定程度的提高了效率,但是对于优化而言,最优的执行计划不是光靠 SQL 语句的模板化来实现的,往往还是需要通过具体值来预估出成本代价。
MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT。
步骤大概分为四步:
1 set —— SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
2 prepare —— PREPARE stmt2 FROM @s;
3 execute —— EXECUTE stmt2;
4 deallocate —— DEALLOCATE PREPARE stmt2;
当执行同样的操作的时候直接返回数据吗?这个应该是用到缓存吧,直接在缓存里取数据。具体操作我也没尝试过。就爱偷偷笑
这就相当于一个方法,已经加载了。只需要你填写一些参数,就能获得相应的结果。这样就大大增加了同样式sql的适用性,性能提高。如果是不同样式的sql,用这种方式反而会降低性能。 如果有不明白请留言。