PHP mysql事务回滚操作实例
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
代码如下 | 复制代码 |
public function insertUser ($userArray){ foreach ($userArray as $key => $value) { @$field .= "$key,"; @$content .= "'$value',"; } $field = ereg_replace(',$', '', $field); $content = ereg_replace(',$', '', $content); $db = db_connect(); //连接数据库 $db->autocommit(FALSE); //设置为非自动提交——事务处理 $sql1 = "INSERT INTO t_user (".$field.") VALUES (".$content.")"; $result1 = $db->query($sql1); $sql2 = "INSERT INTO t_userpost (f_username) VALUES ('".$userArray['f_username']."')"; $result2 = $db->query($sql2); if ($result1 && $result2) { $db->commit(); //全部成功,提交执行结果 echo '提交'; } else { $db->rollback(); //有任何错误发生,回滚并取消执行结果 echo '回滚'; } $db->close(); } |
curl实现get提交数据
代码如下 | 复制代码 |
// 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.111cn.net'); // 设置header, 最后一个参数是0表示返回值不带有header,1表示带有header curl_setopt($curl, CURLOPT_HEADER, 0); // 设置浏览器的特定header,可选,如果目标网站有要求的话 curl_setopt($ch, CURLOPT_HTTPHEADER, array( "User-Agent: {'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)'}", "Accept-Language: {en-us,en;q=0.5}" )); //或者只设置user-agent,可选,如果目标网站有要求的话 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上,1表示保存到字符串 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 页面内容不需要时,设置为1. 默认为0 curl_setopt($ch, CURLOPT_NOBODY, 1); // 运行cURL,请求网页,保存在$data $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); //检查错误 //比较的时候我们用的是“=== FALSE”,而非“== FALSE”,因为我们得区分’空输出‘和’布尔值FALSE‘ if ($output === FALSE) { echo "cURL Error: " . curl_error($ch); } //可以获取信息 $info = curl_getinfo($ch); echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒'; /* ...返回的数组中包括了以下信息: “url” //资源网络地址 “content_type” //内容编码 “http_code” //HTTP状态码 “header_size” //header的大小 “request_size” //请求的大小 “filetime” //文件创建时间 “ssl_verify_result” //SSL验证结果 “redirect_count” //跳转技术 “total_time” //总耗时 “namelookup_time” //DNS查询耗时 “connect_time” //等待连接耗时 “PRetransfer_time” //传输前准备耗时 “size_upload” //上传数据的大小 “size_download” //下载数据的大小 “speed_download” //下载速度 “speed_upload” //上传速度 “download_content_length”//下载内容的长度 “upload_content_length” //上传内容的长度 “starttransfer_time” //开始传输的时间 “redirect_time”//重定向耗时 */ |
curl实现POST提交数据
http的post实现
代码如下 | 复制代码 |
//extract data from the post |
#将所有备份文件备份到指定的目录,如/backup/mysql_data_backup
代码如下 | 复制代码 |
mkdir /backup/mysql_data_backup -p |
添加一行任务
代码如下 | 复制代码 |
0 13 * * * /usr/bin/php /backup/mysql_data_backup/backmysql.php |
表示在每天晚上0点13分用php执行备份命令
代码如下 | 复制代码 |
#!/usr/bin/php < ?php //产生保存目录 $path = dirname(__FILE__) . '/' .date("Ym"); $filename = sprintf("%s/%s.sql.gz", $path, date("YmdHis")); if(!is_dir($path)) mkdir($path); //导出并压缩所有数据库 $cmd = sprintf("/usr/bin/mysqldump -uroot -ppassword --all-databases | /bin/gzip > %s", $filename); echo "backuping...n"; `$cmd`; echo "backup done.n"; |
注意,这里只是计划信息处理了,如果要执行php文件我们需要自己写一个即可。
图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但下面我还是来介绍一个图片保存到mysql数据库的问题解决办法。
代码如下 | 复制代码 |
require 'class/db.php'; $img = fread($fp, filesize($fileName)); $db->execute("insert db2.testimg (`img`) values ('$img') ;"); |
报错
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`?绶q?仳!????1丶>,Mo?'^WZ4in??T春??????U?楹\?' at line 1
代码如下 | 复制代码 |
$img = fread($fp, filesize($fileName)); |
继续报错
各种搜索,百度里的结果都是addslashes,要不就是addslashes也没有的。真是扯淡啊
base64_decode
$img = base64_encode($img);
插入成功。图片文件17.0k
出来进行base64_decode ,显示正常
找到个16进制的办法
$img = bin2hex($img);
有效,输出不用解密 。存入数据库很大 25K。比base64还坑爹呢。
再找。
后来,后来。发现phpmyadmin直接上传的图片文件可以用文件比base64的小。文件12.8k
翻phpmyadmin 源代码
common.lib.php文件183有个神奇的函数
代码如下 | 复制代码 |
function PMA_sqlAddslashes($a_string = '', $is_like = false, $crlf = false, $php_code = false) |
文件大小12.8K 和phpmyadmin的一样大。
例
前台(image.html):
代码如下 | 复制代码 |
<html> |
后台处理(upimage.php):
代码如下 | 复制代码 |
<?php |
显示图片(disimage.php):
代码如下 | 复制代码 |
<?php |
结论
PMA_sqlAddslashes好用 文件12.8k 和原来图片一样大
bin2hex 16进制 好用文件25K
base64_encode 好用,出来的文件需要base64_decode 17K
addslashes 不好用,继续报错(注明:在某些windows机器上addslashes好用)
redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护。
1.比较安全的办法是采用绑定IP的方式来进行控制。
代码如下 | 复制代码 |
bind 127.0.0.1 |
表示仅仅允许通过127.0.0.1这个ip地址进行访问。那么其实只有自己才能访问自己了,其他机器都无法访问他。
这段命令要去redis.conf里修改。
这里请注意
我们常用的启动方式src/redis-server
改为
代码如下 | 复制代码 |
src/redis-server redis.conf |
因为它需要加载配置文件。
这个方法有一点不太好,我难免有多台机器访问一个redis服务
2.设置密码,以提供远程登陆
代码如下 | 复制代码 |
redis.conf 找到 requirepass |
写上
requirepass yourpassword设置密码以后发现可以登陆,但是无法执行命令了。
代码如下 | 复制代码 |
src/redis-cli -h 192.168.1.121 keys * (error) ERR operation not permitted |
授权命令
auth 123456登陆带密码方式
./redis-cli -h 192.168.1.121 -a hzhutid由于redis并发能力极强,仅仅搞密码,攻击者可能在短期内发送大量猜密码的请求,很容易暴力破解,所以建议密码越长越好,比如20位。(密码在 conf文件里是明文,所以不用担心自己会忘记)
相关文章
- 以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
- 这篇文章介绍了在C#中对config文件的操作,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
- 因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
nodejs文件操作模块FS(File System)常用函数简明总结
件系统操作相关的函数挺多的。首先可以分为两大类。一类是异步+回调的。 一类是同步的。在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可1. 首先是一类最常规的读写函数,函数名称和形式,应该是起源于C...2014-06-07- 这篇文章主要介绍了C#模拟window操作鼠标的方法,可实现模拟鼠标移动到固定位置后点击右键的功能,涉及鼠标常用事件的操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
- 这篇文章主要给大家介绍了关于python中字符串最常用的13个处理操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-09
解决@Transactional注解事务不回滚不起作用的问题
这篇文章主要介绍了解决@Transactional注解事务不回滚不起作用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-23- 这篇文章主要介绍了C# 模拟浏览器并自动操作的实例代码,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
- c#对字符串操作的技巧小结,需要的朋友可以参考一下...2020-06-25
- 下面小编就为大家带来一篇js操作XML文件的实现方法兼容IE与FireFox。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-01
- 这篇文章主要介绍了C#操作PowerPoint的方法,涉及C#针对PowerPoint的打开、读取、播放等技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了基于Postgresql 事务的提交与回滚解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
- 比较操作是很简单的基础知识,不过Pandas中的比较操作有一些特殊的点,本文介绍的非常详细,对正在学习python的小伙伴们很有帮助.需要的朋友可以参考下...2021-05-20
- 这篇文章主要介绍了OpenCvSharp实现Mat对象简单的像素操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-17
- 在C#中位操作同C的位操作没有什么区别,位操作的速度相对较快,而且如果熟练的话,处理起来也相对方便,特别是在一些权限等相关的设置中...2020-06-25
- 在.Net中,对文件(File)和文件夹(Folder)的操作可以使用File类和Directory类,也可以使用FileInfo类和DirectoryInfo类,本文将详细介绍,需要的朋友可以参考...2020-06-25
- 这篇文章主要介绍了Spring异常捕获且回滚事务解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-03
- 在本篇文章里小编给大家分享的是一篇关于mysql事务对效率的影响分析总结内容,有需要的朋友们可以跟着学习下。...2021-10-24