php执行sql文件乱码,不完整

我想通过php读取sql文件创建数据库并且写入一些初始的数据,于是我写了以下php代码和sql
经过1楼大神提示,代码已跑通
<?php
//读取文件内容
$sql = file_get_contents('sql/start.sql');

$arr = explode(';', $sql);

var_dump($arr);

$conn = mysqli_connect('localhost','root','');

mysqli_query($conn,'set names utf8');

if (!$conn) {
    exit('连接数据库出错');
}
//执行sql语句
foreach ($arr as $value) {
  //var_dump(str_replace("\n",'',$value));
  mysqli_query($conn,$value);
}
//exit();

mysqli_close($conn);
CREATE DATABASE IF NOT EXISTS wishwall DEFAULT CHARACTER SET 'UTF8';

USE wishwall;

CREATE TABLE IF NOT EXISTS message (
  `id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
  `username` VARCHAR(20) NOT NULL UNIQUE COMMENT '留言用户名',
  `posttime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间',
  `bgcolor` VARCHAR(10) DEFAULT '#FFDFFF' COMMENT '背景颜色',
  `content` VARCHAR(200) NOT NULL COMMENT '留言内容'
)ENGINE=INNODB CHARSET=UTF8;

-- 插入一些土味情话当初始数据 
INSERT message(username,content) VALUES
('渔潅頭A。','“对不起。”“你永远都不要和我说对不起,永远都不要。”'),
('僅剩的余溫','你知道我最大的缺点是什么吗?是缺点你'),
('青春是肆无忌惮旳挥霍つ','你是哪里人?湖南人。不,是我的心上人。'),
('卖女孩的小伙柴','你的脸上有点东西,有什么?有点漂亮。'),
('爱人の头颅','到家了吗?没有,没你的地方都不算家。');
运行以后没有报错,var_dump出来的数据如下:
array (size=5)
  0 => string 'CREATE DATABASE IF NOT EXISTS wishwall DEFAULT CHARACTER SET 'UTF8'' (length=67)
  1 => string '

USE wishwall' (length=16)
  2 => string '

CREATE TABLE IF NOT EXISTS message (
  `id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
  `username` VARCHAR(20) NOT NULL UNIQUE COMMENT '留言用户名',
  `posttime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间',
  `bgcolor` VARCHAR(10) DEFAULT '#FFDFFF' COMMENT '背景颜色',
  `content` VARCHAR(200) NOT NULL COMMENT '留言内容'
)ENGINE=INNODB CHARSET=UTF8' (length=394)
  3 => string '

INSERT message(username,content) VALUES
('渔潅頭A。','“对不起。”“你永远都不要和我说对不起,永远都不要。”'),
('僅剩的余溫','你知道我最大的缺点是什么吗?是缺点你'),
('青春是肆无忌惮旳挥霍つ','你是哪里人?湖南人。不,是我的心上人。'),
('卖女孩的小伙柴','你的脸上有点东西,有什么?有点漂亮。'),
('爱人の头颅','到家了吗?没有,没你的地方都不算家。')' (length=489)
  4 => string '
' (length=2)

有以下两个问题,是哪里不对呢:

  • 创建出来的message表注释是乱码
  • 表创建出来了,但是初始数据并没有写入(INSERT语句没有问题,在mysql命令行里是可以成功的)
  • 如果想在sql里写注释是不是会影响读取,sql里不能有回车或者换行?
狐的传说
浏览 383回答 1
1回答

宝慕林4294392

关于乱码:在 $conn = mysqli_connect('localhost','root',''); 下面添加: mysqli_query($conn,'set names utf8'); 就可以了,加注释不影响读取,测试代码可以执行:
打开App,查看更多内容
随时随地看视频慕课网APP