图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但下面我还是来介绍一个图片保存到mysql数据库的问题解决办法。
代码如下 |
复制代码 |
require 'class/db.php';
$fileName = "a1.jpg";
$fp = fopen($fileName, "r");
$img = fread($fp, filesize($fileName));
fclose($fp);
$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));
$img = addslashes($img)
|
继续报错
各种搜索,百度里的结果都是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)
{
if ($is_like) {
$a_string = str_replace('\', '\\\\', $a_string);
} else {
$a_string = str_replace('\', '\\', $a_string);
}
if ($crlf) {
$a_string = str_replace("n", 'n', $a_string);
$a_string = str_replace("r", 'r', $a_string);
$a_string = str_replace("t", 't', $a_string);
}
if ($php_code) {
$a_string = str_replace(''', '\'', $a_string);
} else {
$a_string = str_replace(''', '''', $a_string);
}
return $a_string;
} // end of the 'PMA_sqlAddslashes()' function$img = PMA_sqlAddslashes($img);
|
文件大小12.8K 和phpmyadmin的一样大。
例
前台(image.html):
代码如下 |
复制代码 |
<html>
<head>
<title>上传图片</title>
</head>
<body>
<form method="post" action="upimage.php" enctype="multipart/form-data">
<input type="hidden" value="204800" name="MAX_FILE_SIZE"/>
File: <input type="file" name="imgfile" />
<input type="submit" value="OK" name="submitbtn" style="width:100px;height:23px"/></center>
</form>
</body>
</html>
|
后台处理(upimage.php):
代码如下 |
复制代码 |
<?php
//向数据库中插入图片
$imgfile=$_FILES['imgfile'];
$submitbtn=$_POST['submitbtn'];
if($submitbtn=='OK' and is_array($imgfile)){
$name=$imgfile['name']; //取得图片名称
$type=$imgfile['type']; //取得图片类型
$size=$imgfile['size']; //取得图片长度
$tmpfile=$imgfile['tmp_name']; //图片上传上来到临时文件的路径
if($tmpfile and is_uploaded_file($tmpfile)){ //判断上传文件是否为空,文件是不是上传的文件
//读取图片流
$file=fopen($tmpfile,"rb");
$imgdata=bin2hex(fread($file,$size)); //bin2hex()将二进制数据转换成十六进制表示
fclose($file);
$mysqli=mysql_connect("localhost","root","123456″); //连接数据库函数
mysql_select_db("test"); //选择数据库
//插入出数据库语句,图片数据前要加上0x,用于表示16进制数
if(mysql_query("insert into images(name,type,image) values('".$name."','".$type."',0x".$imgdata.")"))
echo "<center>插入成功!<br><br><a href='disimage.php'>显示图片</a></center>";
else
echo "<center>插入失败!</center>";
mysql_close();
}else
echo "<center>请先选择图片!<br><br><a href='image.html'>点此返回</a></center>";
} else
echo "<center>请先选择图片!<br><br><a href='image.html'>点此返回</a></center>";
?>
|
显示图片(disimage.php):
代码如下 |
复制代码 |
<?php
mysql_connect("localhost","root","123456″);
mysql_select_db("test");
//显示最新插入的那张图片
$result=mysql_query("select image from images where id=(select max(id) from images)");
$row=mysql_fetch_object($result);
header("Content-Type:image/pjpeg");
echo $row->image;
mysql_close();
?>
|
结论
PMA_sqlAddslashes好用 文件12.8k 和原来图片一样大
bin2hex 16进制 好用文件25K
base64_encode 好用,出来的文件需要base64_decode 17K
addslashes 不好用,继续报错(注明:在某些windows机器上addslashes好用)
php备份mysql我们需借助于系统的计划任务功能,下面我来介绍在linux中php备份mysql实例方法。
#将所有备份文件备份到指定的目录,如/backup/mysql_data_backup
代码如下 |
复制代码 |
mkdir /backup/mysql_data_backup -p
cd /backup/mysql_data_backup
wget /backmysql.txt -O backmysql.php
chmod +x backmysql.php
crontab -e
|
添加一行任务
代码如下 |
复制代码 |
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文件我们需要自己写一个即可。
本文章来给大家介绍关于redis访问权限控制,密码设置基本步骤,有需要了解的朋友不防进入参考。
redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护。
1.比较安全的办法是采用绑定IP的方式来进行控制。
表示仅仅允许通过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文件里是明文,所以不用担心自己会忘记)
本文章来给各位php入门者详细关于php连接数据库的实例代码,这里主要讲到了入门级的mysql连接代码到高级的封装数据库连接类,希望此文章对各位朋友所有帮助。
连接MySQL数据库的两种方法:
(1)利用PHP的数据库函数连接
此方式是最常用的一种方式.
这里主要用到四个数据库函数:
mysql_connect () 建立与MySQL服务器的连接。
mysql_select_db ():选择MySQL服务器中的数据库供以后的数据查询操作query处理。
mysql_query ():送出query字符串以帮助MySQL做相关的处理或执行。
mysql_fetch_row ():用来将查询结果result单行移到数组变量中。数组的索引是数字
索引,第一个索引值是0。
(2)通过ODBC连接
PHP通过ODBC连接MySQL数据库主要用到四个函数:
Odbc_connect ():用来同ODBC数据源建立连接。
Odbc_do ():用来在建立连接之后执行数据库查询。
Odbc_result():用于取得当前记录行中某个字段的值。
Odbc_fetch_row ():用来把查询结果保存到数组,每个数组元素对应一条记录。
我们先来看PHP的数据库函数连接 方法实例
连接到一个 MySQL 数据库
在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接。
在 PHP 中,这个任务通过 mysql_connect() 函数完成。
语法
mysql_connect(servername,username,password);参数 描述
servername 可选。规定要连接的服务器。默认是 "localhost:3306"。
username 可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password 可选。规定登录所用的密码。默认是 ""。
代码如下 |
复制代码 |
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_close($con);
?>
|
面向对象mysqli(详细教程)
代码如下 |
复制代码 |
<?php
$mysqli = new mysqli('localhost','root','','volunteer');
if (mysqli_connect_errno()){
die('Unable to connect!'). mysqli_connect_error();
}
?>
|
pdo连接mysql(详细教程)
代码如下 |
复制代码 |
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
try {
foreach ($db->query('select * from user') as $row){
print_r($row);
}
$db = null; //关闭数据库
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
|
然后我们还可以使用ODBC连接数据库
代码如下 |
复制代码 |
<?php
require_once './adodb5/adodb.inc.php';
$conn = &ADONewConnection('mysql');
$conn->connect('localhost','root','','test');
$conn->Execute("set names utf8");
$res = $conn->Execute("select * from user");
if (!$res){
echo $conn->ErrorMsg();
}else{
var_dump($res);
}
?>
|
mysql数据连接类
代码如下 |
复制代码 |
<?php
//------------------------------------------------------------------------------------------
// ※Database() 构造函数,数据库初始参数
// ※Select() 查询
// ※GetRows() 返回查询的记录总数
// ※Insert() 插入记录
// ※Update() 更新
// ※Delete() 删除
// ※Halt() 中断并显示错误信息*/
//------------------------------------------------------------------------------------------
define("DATABASETYPE", "1"); //定义数据库类型:1为MySql;2为SQL Server;3为Oracle;4为Odbc
define("SERVER", "localhost"); //Host name or IP address of the database server
define("DATABASE", "dbName"); //要连接的数据库名
define("USER", "tableName"); //用于连接数据库的用户名
define("PASSWORD", "paswd"); //用于连接数据库的密码
class Database {
var $dbLink; //连接句柄
var $result; //查询句柄
var $insId; //Insert()成功返回AUTO_INCREMENT列的值
var $rows; //返回数据数组
var $numRows; //返回数据数目
var $dbHost, $dbUser, $userPassword, $database;
var $dbType = DATABASETYPE;
var $msgFlag = "yes"; //yes:show the Mysql message ; no: die by show "Halted."
function Database($dbHost = SERVER, $dbUser = USER, $userPassword = PASSWORD, $database = DATABASE) {
switch ($this->dbType) {
case 1:
$this->dbLink = @mysql_pconnect($dbHost, $dbUser, $userPassword); // or die("Can't Connect to Remote Host!");
@mysql_select_db($database, $this->dbLink); // or die ("Can't Connect to Remote Host!");
break;
case 2:
break;
}
return true;
}
/* SQL:Select() 返回为false无结果 */
function Select($table, $columns, $condition = 1) {
$sql = "select $columns from $table where $condition ";
$this->result = @mysql_query($sql, $this->dbLink);
unset($this->rows);
if ($this->result) {
$i = 0;
if (!($this->rows = array("$i" => @mysql_fetch_array($this->result))))
return false;
if (($this->numRows = @mysql_num_rows($this->result)) == 0)
return false;
while ($tempRows = @mysql_fetch_array($this->result)) {
array_push($this->rows, $tempRows);
}
} else {
$this->Halt($sql);
return false;
}
return true;
}
/* SQL:GetRows() 返回查询的记录总数 */
function GetRows($table, $condition = 1) {
$sql = "select count(1) as count from $table where $condition";
$this->result = @mysql_query($sql, $this->dbLink);
if ($this->result) {
$temp = @mysql_fetch_array($this->result);
$this->numRows = $temp[count];
} else {
$this->Halt($sql);
return false;
}
return $this->numRows;
}
/* SQL:Insert() */
function Insert($table, $columns, $values) {
$sql = "insert into $table ($columns) values ($values)";
$this->result = @mysql_query($sql, $this->dbLink);
if ($this->result)
$this->insId = @mysql_insert_id($this->dbLink);
else {
$this->Halt($sql);
return false;
}
return true;
}
/* SQL:Update() */
function Update($table, $setings, $condition) {
$sql = "update $table set $setings where $condition";
$this->result = @mysql_query($sql, $this->dbLink);
if ($this->result)
$this->numRows = @mysql_affected_rows($this->result);
else {
$this->Halt($sql);
return false;
}
return true;
}
/* SQL:Delete */
function Delete($table, $condition) {
$sql = "delete from $table where $condition";
$this->result = @mysql_query($sql, $this->dbLink);
if ($this->result)
$this->numRows = @mysql_affected_rows($this->result);
else {
$this->Halt($sql);
return false;
}
return true;
}
/* Halt():error message */
function Halt($msg) {
if ($this->msgFlag == "yes") {
printf("<b>Database Query Error:</b> %s<br>n", $msg);
printf("<b>MySql Error:</b> %s<br>n", mysql_error());
}else
echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=../include/error.htm'>"; //自定一个出错提示文件
return false;
}
}
switch ($db->dbType) {
case 1:
@mysql_close();
break;
case 2:
break;
}
$db = new Database();
?>
|
友情提示
如果出现连接mysql数据库中文乱码我们可以在连接数据库查询之前加上mysql_query("set names utf8"); 如果你是gbk就使用gbk编编码了
短语密码是phpmyadmin为了防止多个登录时出现混乱了,所以要求我们配置一下config.sample.inc.php中的 $cfg[\'blowfish_secret\'] 短语密码,下面我来给大家介绍解决办法。
配置的phpmyadmin3.2.4用来管理MySQL数据库,登陆进入以后,页面下面提示:配置文件现在需要一个短语密码。
解决方法:编辑phpmyadmin目录里的config.inc.php文件,找到:$cfg['blowfish_secret'] = ' '; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
在$cfg['blowfish_secret'] = ' ';后面两个单引号内随便输入一些字符,以加强密码安全即可。
具体解决方法
1、将 phpMyAdmin/libraries/config.default.php中的
代码如下 |
复制代码 |
$cfg['blowfish_secret'] = ''; |
改成
代码如下 |
复制代码 |
$cfg['blowfish_secret'] = '111cn.net';
|
(注:其中的'111cn.net′为随意的字符)
2、在phpMyAdmin目录中,打开config.sample.inc.php,18行
代码如下 |
复制代码 |
$cfg['blowfish_secret'] = '';
|
成
代码如下 |
复制代码 |
$cfg['blowfish_secret'] = '111cn.net';
|
(注:其中的'111cn.net′为随意的字符)
这个密码用于Cookies的加密,以免多个PhpMyAdmin或者和其他程序共用Cookies时搞混。
标签:[!--infotagslink--]