vscode+phpstudy连接使用mysql(解决phpstudy中mysql无法启动的问题)
使用vscode+phpstudy配置php开发环境网上很文章都是挺好的,都成功解决了我的问题。但是对于使用mysql方面始终找不到很系统的文章,而且很多解决方法我都不适用,而且找到的文章都是几年前的,并且小皮的版本都比较低,所以我总结了下自己遇到的问题包括mysql的连接使用,亲测有效。
1.小皮内的mysql无法启动
首先遇到最多的问题就是小皮(phpstudy)的mysql无法启动,原因就是自己已经下过mysql并且已经开启服务了。
win10直接搜索服务就能查看自己的mysql项目了。这边大部分解释都是小皮自带的mysql和自己下载的mysql都占用了3306端口,但是修改端口后我仍是无法启动。
还有文章说在服务中可以手动启动MySQLa,据说这是小皮自带的mysql的名称,但是我在服务中并未找到该项目,而且我的服务中只有一个mysql项目,右键属性查看文件路径,发现这是我自己下载的那个mysql,并非是小皮自带的,这与大部分文章描述地都不一致。我试了许多方法,最终只有一个最有效。
首先把自己下载的mysql内的data文件夹备份(全部备份也可以,都是为了防止数据库中的数据丢失),然后搜cmd右键以管理员身份打开。
sc delete 服务中自己mysql项目的名称
输出上述代码,比如我服务中的项目是MySQL,所以我就输入
sc delete MySQL 将该服务删除,然后就可以启动小皮中的mysql了,如果还是不行,建议重启一下电脑。
后续如果还想使用自己下的数据库,可以重新启动该服务。
最后成功启动了mysql,而且一切功能正常,然后我又回到服务中查找mysql项目,发现一个都没有。这是什么原因我也不清楚,我只能粗浅地认为最新版的小皮可能就是这样吧。反正不影响使用就行。
2.正式使用mysql
启动mysql(一键启动WAMP),默认用户和密码都是root。然后打开小皮面板右上角数据库工具,推荐使用phpMyAdmin,因为SQL_Front有很多问题,网上搜说是跟8.0数据库的兼容出现问题,解决方法找到很多但不能解决全部问题。主要还是phpMyAdmin更全面好用吧,至少对于新手上路没有什么复杂的操作。(找不到数据库工具的去小皮左侧“软件管理”下载)
打开phpMyAdmin输入用户密码,点击上方数据库创建数据库
输入库名创建成功后左侧找到对应数据库创建新表,这个就不多赘述了,网上教程很多,主要讲容易出问题的地方。
数据表有了后打开vscode准备连接数据库。
点击MYSQL的+号,在正上方依次输入自己的数据库信息,第一个一般都是localhost,第二个是用户名,一般是root,第三个是密码,没有自己改默认也是root,第四个是端口,没有自己改就是3306,然后一直回车就行了。只要这些信息没错误,并且数据库这些都启动了,肯定没问题。
能看到自己的数据库就说明ok了。
基本配置结束就开始动手写代码了。
我是使用PDO连接数据库,跟mysqli还有其他连接方法有什么差异可以自己搜,反正强推PDO。
上代码看注释啊:
<?php
/**
* 连接数据库
*/
$servername = "localhost";
$username = "root";
$password = "root";
$dsn = "mysql:host=$servername;dbname=test;charset=utf8";
//数据源:类型:host=主机名;dbmame=数据库名;charset=编码;
try {
$conn = new PDO($dsn, $username, $password);
echo "连接成功<br/>";
//$conn = null;//两种方法关闭数据库
//unset($conn);
} catch (PDOException $e) {
echo $e->getMessage();
}
连接成功后继续:
<?php
/**
*连接并进行数据库操作
* 1.连接数据库,创建PDO对象
* 2.创建预处理对象
* 3.执行sql语句
* 4.解析结果集
* 5.遍历结果集
* 代码的(1)(2)...注释就是以上的步骤
*/
require 'mysql_test1.php'; //引入连接文件(1)
//tb_id 命名占位符
$sql = "SELECT * FROM `tb_admin` WHERE `tb_id`>:tb_id";//这边的语句只是示例
$stmt = $conn->prepare($sql); //(2)stmt就是预处理对象
$stmt->setFetchMode(PDO::FETCH_ASSOC);//只获取关联部分,忽略索引。删调这个句子就能发现输出有什么不同
if ($stmt->execute([':tb_id' => -1])) //给占位符赋值(3)
{
$res = $stmt->fetchAll(); //(4)
} else {
print_r($stmt->errorInfo());
die;
}
//print_r($res);//(5)
foreach ($res as $row) {
echo print_r($row, true), '<hr>';
}
echo '共有'.count($res).'记录满足要求'.'<hr>';
这边再说一下初学者可能会有的困惑,将.php文件以网页方式打开只能看到代码,要通过服务器打开才是执行后的结果(简单说就是链接的形式打开)。这个也可以在vscode中配置,当然,小皮中的数据库和服务器都要打开。