**如何把二维码导入到mysql中?
然后怎么调用mysql的二维码数据?**
(纯前端小白第一次接触MYSQL,忘体谅。)
希望大家一起进步!
二维码就一段文本,数据库可以存文本
前台显示:
可以使用一些二维码接口显示,
或者使用 https://github.com/gera2ld/qr... 显示
如果有后台,可以使用phpqrcode
存储:
如果你的来源就是一张二维码图片,那么,如果能识别二维码并得到文本(比如后台可以识别),那么存文本
如果无法识别,服务器存图片即可,和数据库无关。
另外不要将二进制存入MySQL,这种方式很低效。
如果二维码是标准完全可以识别的就将二维码识别成文本存入数据库,取出时候文本在生成二维码图片字节数组
如果二维码是非标准的可以将二维码图片编码成Base64文本存入数据库,取出时候Base64文本转换成二维码图片字节数组就可以了
核心是将图片二进制数据存入数据库blob类型的字段
CREATE TABLE `upload` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(20) NOT NULL,
`data` mediumblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
HTML
<!doctype html>
<html>
<head>
<title>
Post-Image
</title>
</head>
<body>
<form action="post.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file"/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
PHP
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
$type = $_FILES["file"]["type"];
$size = $_FILES['file']['size'];
$tmp=$_FILES["file"]["tmp_name"];
$fp = fopen($tmp,'rb');
$data = bin2hex(fread($fp,$size));
$dsn='mysql:host=localhost;dbname=test';
echo '<pre>';
try{
$pdo = new PDO($dsn,'root','root');
$pdo->exec("INSERT INTO `upload`(`type`,`data`) values ('$type',0x$data)");
$id = $pdo->lastInsertId();
echo 'upload success!<a href="view.php?id='.$id.'">View</a>';
$pdo = null;
}catch (PDOException $e){
echo $e->getMessage();
}
echo '</pre>';
fclose($fp);
}
输出二维码
<?php
$id = $_GET['id'];
if(is_numeric($id)){
$dsn='mysql:host=localhost;dbname=test';
try{
$pdo = new PDO($dsn,'root','root');
$rs = $pdo->query('select * from `upload` where `id`='.$id);
$row = $rs->fetchAll();
$data = $row[0];
header("Content-Type:${data['type']}");
echo $data['data'];
$pdo = null;
}catch (PDOException $e){
echo $e->getMessage();
}
}else{
exit();
}
1 回答2.6k 阅读✓ 已解决
5 回答1.5k 阅读
2 回答2.2k 阅读
3 回答2.4k 阅读
4 回答2.1k 阅读
3 回答771 阅读✓ 已解决
1 回答2.4k 阅读
三个思路:
二维码就是一段文本,只要存储这段文本就好了;
虽然二维码就是一段文本,但是很多二维码有很多花样。这些花样或者只有观赏效果(比如颜色和图标),没有实际意义;或者适用于纠错,没有内部意义。如果想保存,尽量只保存图片到本地,不要存到数据库;数据库中可以记录本地保存的这个图片的位置和名称
如果非要带花样存到数据库,那就用二进制存储到数据库,但是建议不这么做,效率很低;或者先把图片使用BASE64编码,再存到数据库,虽然这个方法更容易理解接受,但更不建议这么做,不仅效率更差,而且占用空间会变成原来的三分之四。
总而言之,数据库的优势在于查询,而不是存储。